本帖最后由 4399APPLE 于 2015-10-24 10:23 编辑
库函数qsort
----------以下内容转自百度百科----------- 功能:使用快速排序例程进行排序
- 头文件:stdlib.h
- 用法:void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
- 参数:
- 1 待排序数组首地址
- 2 数组中待排序元素数量
- 3 各元素的占用空间大小
- 4 指向函数的指针,用于确定排序的顺序
复制代码 举个简单的例子:
- #include <stdio.h>
- #include <stdlib.h>
- int upsort(const void *a, const void *b)
- {
- return (*(int *)a) - (*(int *)b);
- }
- int main()
- {
- int a[10], i;
- for(i = 0;i < 10;i ++)
- scanf("%d", &a[i]);
- qsort(a, 10, sizeof(a[0]), upsort);
- for(i = 0;i < 10;i ++)
- printf("%d", a[i]);
- return 0;
- }
复制代码 由键盘输入10个数,将它们升序排序后输出
这比自己写排序函数简单得多
当然,一些新手总会问upsort里面的那句return是怎么回事,为什么qsort有一个参数直接传递了一个函数的名称
好吧,我只能简单说一句,upsort是一个函数指针,qsort的第四个参数也是函数指针
----------以下内容转自百度百科----------- 其中base是排序的一个集合数组,
- num是这个数组元素的个数,
- width是一个元素的大小,
- comp是一个比较函数。
- 比如:对一个长为1000的数组进行排序时,
- int a[1000];
- 那么base应为a,
- num应为1000,
- width应为sizeof(int),
- comp函数随自己的命名。
- qsort(a, 1000, sizeof(int), comp);
- 其中comp函数应写为:
- int comp(const void *a,const void *b)
- {
- return (*(int*)a) - (*(int*)b);
- }
- 上面是由小到大排序,return (*(int*)b) - (*(int*)a); 为由大到小排序。
复制代码 就说这么多,有关更多函数指针的代码,请自行百度
最后写上用qsort做的 P1003不高兴的津津- #include <stdio.h>
- #include <stdlib.h>
- typedef struct
- {
- int number;
- int lesson;
- }DAY;
- int downsort(const void *a, const void *b)
- {
- if((*(DAY*)a).lesson != (*(DAY*)b).lesson)
- return (*(DAY*)b).lesson - (*(DAY*)a).lesson;
- return (*(DAY*)a).number - (*(DAY*)a).number;
- }
- int main()
- {
- DAY day[7];
- int t[7], i;
- for(i = 0;i < 7;i ++)
- {
- scanf("%d %d", &day[i].lesson, &t[i]);
- day[i].lesson += t[i];
- day[i].number = i + 1;
- }
- qsort(day, 7, sizeof(day[0]), downsort);
- printf("%d", day[0].number);
- getchar(), getchar();
- return 0;
- }
复制代码 |