C语言qsort函数怎么用?

cooksa 2015-02-09 05:26:14

#include <iostream>
using namespace std;

typedef struct
{
unsigned long id;
int score;
}record;

int main()
{
int id_cmp(const void* s1,const void* s2);
int score_cmp(const void* s1,const void* s2);

record recordset[] = {{3,99},{5,87},{4,56},{2,100},{1,17}};

int recordcount = sizeof(recordset) / sizeof(record);

printf("排序前:\n");
for(int i = 0; i < recordcount;i++)
printf("%8d %8u %8d\n",i,recordset[i].id,recordset[i].score);

qsort(recordset,recordcount,sizeof(record),id_cmp);
printf("排序后:\n");
for(int i = 0; i < recordcount;i++)
printf("%8d %8u %8d\n",i,recordset[i].id,recordset[i].score);


qsort(recordset,recordcount,sizeof(record),score_cmp);
printf("排序后:\n");
for(int i = 0; i < recordcount;i++)
printf("%8d %8u %8d\n",i,recordset[i].id,recordset[i].score);

return 0;
}

int id_cmp(const void* s1,const void* s2)
{
record* p1 = (record* )s1;
record* p2 = (record* )s2;
if(p1->id < p2->id) return -1;
else if(p1->id == p2->id) return 0;
else return 1;
}

int score_cmp(const void* s1,const void* s2) //这个函数指针为什么能改变排序顺序
{
record* p1 = (record* )s1;
record* p2 = (record* )s2;
if(p1->score < p2->score) return -1;
else if(p1->score == p2->score) return 0;
else return 1;
}
...全文
1395 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmyoukonw 2015-02-09
  • 打赏
  • 举报
回复
首先楼主要知道qsort这个c函数的原型: void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); “The qsort() function sorts buf (which contains num items, each of size size) using Quicksort. The compare function is used to compare the items in buf. compare should return negative if the first argument is less than the second, zero if they are equal, and positive if the first argument is greater than the second. qsort() sorts buf in ascending order.” qsort这个函数对buf这个数组进行快速排序,buf包含num个元素,每个元素大小为size。 第四个参数是一个接受两个参数的函数的指针:如果第一个参数小于第二个参数,这个函数返回负数;如果相等返回0;如果大于返回正数。 主要难点在于第四个参数,这个函数指针你应该怎么用。
cooksa 2015-02-09
  • 打赏
  • 举报
回复
引用 1 楼 a30037338 的回复:
这个函数用来确定是升序还是降序。 如果是升序,那么就是如果s1比s2大返回一个正值,小则负值,相等返回0. 降序的话就相反
主要是想知道原理。
此后三年 2015-02-09
  • 打赏
  • 举报
回复
这个函数用来确定是升序还是降序。 如果是升序,那么就是如果s1比s2大返回一个正值,小则负值,相等返回0. 降序的话就相反

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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