cooksa 2015-02-09 09:24 采纳率: 100%
浏览 2058
已采纳

C语言qsort函数怎么用?

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

  • 写回答

2条回答 默认 最新

  • devmiao 2015-02-09 10:51
    关注

    因为排序的关键是对要排序的数据两两比较大小,比较大小的不同决定了排序依据的不同,传入不同的函数指针,实现不同的大小比较就能改变排序顺序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题