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;
}

发现自己对快排这个函数的用法不是很理解,自己学了下,就是调用不正确,总是不得结果,甚至还出错,哪位能不能给我指点下,我初学~谢谢各位~
...全文
78 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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)?谢谢

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧