搜索
查看: 670|回复: 2
打印 上一主题 下一主题

[原创] 库函数qsort

[复制链接]
跳转到指定楼层
楼主
发表于 2015-10-24 10:20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 4399APPLE 于 2015-10-24 10:23 编辑

库函数qsort
----------以下内容转自百度百科----------
  1. 功能:使用快速排序例程进行排序
  2. 头文件:stdlib.h
  3. 用法:void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
  4. 参数:
  5. 1 待排序数组首地址
  6. 2 数组中待排序元素数量
  7. 3 各元素的占用空间大小
  8. 4 指向函数的指针,用于确定排序的顺序
复制代码
举个简单的例子:
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int upsort(const void *a, const void *b)
  4. {
  5.     return (*(int *)a) - (*(int *)b);
  6. }

  7. int main()
  8. {
  9.     int a[10], i;

  10.     for(i = 0;i < 10;i ++)
  11.         scanf("%d", &a[i]);
  12.     qsort(a, 10, sizeof(a[0]), upsort);

  13.     for(i = 0;i < 10;i ++)
  14.         printf("%d", a[i]);

  15.     return 0;
  16. }
复制代码
由键盘输入10个数,将它们升序排序后输出
这比自己写排序函数简单得多
当然,一些新手总会问
upsort里面的那句return是怎么回事,为什么qsort有一个参数直接传递了一个函数的名称

好吧,我只能简单说一句,upsort是一个函数指针,qsort的第四个参数也是函数指针
----------以下内容转自百度百科----------
  1. 其中base是排序的一个集合数组,
  2. num是这个数组元素的个数,
  3. width是一个元素的大小,
  4. comp是一个比较函数。

  5. 比如:对一个长为1000的数组进行排序时,
  6. int a[1000];
  7. 那么base应为a,
  8. num应为1000,
  9. width应为sizeof(int),
  10. comp函数随自己的命名。

  11. qsort(a, 1000, sizeof(int), comp);
  12. 其中comp函数应写为:
  13. int comp(const void *a,const void *b)
  14. {
  15.     return (*(int*)a) - (*(int*)b);
  16. }
  17. 上面是由小到大排序,return (*(int*)b) - (*(int*)a); 为由大到小排序。
复制代码
就说这么多,有关更多函数指针的代码,请自行百度
最后写上用qsort做的 P1003不高兴的津津
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct
  4. {
  5.     int number;
  6.     int lesson;
  7. }DAY;

  8. int downsort(const void *a, const void *b)
  9. {
  10.     if((*(DAY*)a).lesson != (*(DAY*)b).lesson)
  11.         return (*(DAY*)b).lesson - (*(DAY*)a).lesson;
  12.     return (*(DAY*)a).number - (*(DAY*)a).number;
  13. }

  14. int main()
  15. {
  16.     DAY day[7];
  17.     int t[7], i;

  18.     for(i = 0;i < 7;i ++)
  19.     {
  20.         scanf("%d %d", &day[i].lesson, &t[i]);
  21.         day[i].lesson += t[i];
  22.         day[i].number = i + 1;
  23.     }
  24.     qsort(day, 7, sizeof(day[0]), downsort);
  25.     printf("%d", day[0].number);

  26.     getchar(), getchar();
  27.     return 0;
  28. }
复制代码
沙发
发表于 2015-10-24 22:51:42 | 只看该作者
回头看!
板凳
发表于 2016-8-4 21:17:45 | 只看该作者
头晕
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表