啊哈磊_编程从这里起步
标题:
库函数qsort
[打印本页]
作者:
4399APPLE
时间:
2015-10-24 10:20
标题:
库函数qsort
本帖最后由 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;
}
复制代码
作者:
福华
时间:
2015-10-24 22:51
回头看!
作者:
s141336
时间:
2016-8-4 21:17
头晕
欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/)
Powered by Discuz! X3.2