qsort的问题

dzh696 2008-04-22 10:57:52
/*
============================================================================
Name : newpractice-qsort.c
Author : king caesar
Version : 1.001
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp();

int main(){
int i, n;
int a[10];
char t;

scanf("%d", &n);getchar();
for(i = 0; i < n; i++){
scanf("%d%c", &a[i], &t);
}
qsort(a, 3, sizeof(a), cmp);
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}

int cmp(const void *a, const void *b){
if(*((int *)a) > *((int *)b)) return 1;
else return -1;
}

发现自己对快排这个函数的用法不是很理解,自己学了下,就是调用不正确,总是不得结果,甚至还出错,哪位能不能给我指点下,我初学~谢谢各位~
...全文
50 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rushman 2008-04-23

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
* 声明应该这样
*/
int cmp(const void * a, const void * b);

int main(){
int i, n;
int a[10];
char t;

scanf("%d", &n);getchar();
for(i = 0; i < n; i++){
scanf("%d%c", &a[i], &t);
}
/*
* 调用参数错了
* void qsort(
* void *base, // 数组的基地址
* size_t num, // 数组的单元数
* size_t width,// 数组单元的字节数
* int (__cdecl *compare )(const void *, const void *) // 比较函数
* );
*/
qsort(a, n, sizeof(int), cmp);
for(i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}

/*
* 没有判断相等的情况,不符合规范
int cmp(const void *a, const void *b){
if(*((int *)a) > *((int *)b)) return 1;
else return -1;
}
*/

/*
* 对于简单的整数可以这样
*/
int cmp(const void * a, const void * b){
return ( *(int *)a - *(int *)b );
}
回复
dzh696 2008-04-23
恩,我已经会用了谢谢~
回复
dzh696 2008-04-23
那是不是写成qsort(a, 10, sizeof(int), cmp);就对了呢?int (__cdecl *compare )(const void *, const void *)这个int后面那个括号我看得不太懂啊?如果是我的是不是写成(* cmp)?谢谢
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-22 10:57
社区公告
暂无公告