鱼C论坛

 找回密码
 立即注册
查看: 2023|回复: 0

[技术交流] qsort的比较函数以及用qsort对结构体排序

[复制链接]
发表于 2020-2-27 14:15:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字典序由小到大排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. typedef struct Student
  5. {
  6.     char name[100];    //姓名
  7.     int age;          //年龄
  8.     int grade;         //分数
  9. }student;

  10. student stu[1000];

  11. int cmp(const void* s1, const void* s2)//比较结构体成员的大小,s1和s2是指向数组元素的指针
  12. {
  13.     student *stu1 = (student *) s1;
  14.     student *stu2 = (student *) s2;

  15.     if(stu1 -> grade != stu2 -> grade)    //stu1是结构体指针,需要用->访问结构体成员
  16.         return (stu1 -> grade - stu2 -> grade);
  17.     else if(strcmp(stu1 -> name, stu2 -> name) != 0)
  18.         return strcmp(stu1 -> name, stu2 -> name);
  19.     else
  20.         return (stu1 -> age - stu2 -> age);
  21. }

  22. int main()
  23. {
  24.     int n;                //一共n名学生
  25.     int i;
  26.     while(scanf("%d", &n) != EOF)
  27.     {
  28.         for(i = 0; i < n; i++)
  29.         {
  30.             scanf("%s %d %d", stu[i].name, &(stu[i].age), &(stu[i].grade));//stu[i]是结构体变量,要用.访问结构体成员
  31.         }//输入信息
  32.         qsort(stu, n, sizeof(stu[0]), cmp);        //排序
  33.         for(i = 0; i < n; i++)
  34.         {
  35.             printf("%s %d %d\n", stu[i].name, stu[i].age, stu[i].grade);
  36.         }
  37.     }
  38.    
  39.     return 0;
  40. }
复制代码




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表