调用函数库中的快速排序算法qsort()排序各种数据类型
来源:互联网 发布:驱动人生网卡版无网络 编辑:程序博客网 时间:2024/04/29 19:45
快速排序算法已经有函数库提供给我们了,我们只要根据待排序的数据类型,重写cmp()这个接口函数就行了。下面是实例。
qsort()函数在stdlib.h库中
C语言中的qsort()函数原型为void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) ) ;
Ø一、对int类型数组排序
Ø
Øint num[100];
Ø
ØSample:
Ø
Øint cmp ( const void *a , constvoid *b )
Ø
Ø{
Ø
Øreturn*(int*)a - *(int*)b;
Ø
Ø}
Ø
Øqsort(num,100,sizeof(num[0]),cmp);
Ø二、对字符进行排序
Øcharword[100];
Ø
ØSample:
Ø
Øint cmp( const void*a , const void*b )
Ø
Ø{
Ø
Øreturn*(char *)a - *(int *)b;
Ø
Ø}
Ø
Øqsort(word,100,sizeof(word[0]),cmp);
Ø
Ø
Ø三、对double类型数组排序(特别要注意)
Ø
Ødoublein[100];
Ø
Øint cmp( const void*a , const void*b )
Ø
Ø{
Ø
Øreturn*(double *)a > *(double *)b ? 1 : -1;
Ø
Ø}
Ø
Øqsort(in,100,sizeof(in[0]),cmp);
Ø四、对结构体一级排序
Ø
Østruct In
Ø
Ø{
Ø
Ødouble data;
Ø
Øint other;
Ø
Ø}s[100]
Ø
Ø//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很
Ø多种,参考上面的例子写
Ø
Øint cmp( const void*a ,const void*b)
Ø
Ø{
Ø
Øreturn((In *)a)->data > ((In *)b)->data ? 1 : -1;
Ø
Ø}
Ø
Øqsort(s,100,sizeof(s[0]),cmp);
Ø五、对结构体二级排序
Ø
Østruct In
Ø
Ø{
Øint x;
Øint y;
Ø}s[100];
Ø
Ø//按照x从小到大排序,当x相等时按照y从大到小排序
Ø
Øint cmp( const void*a , const void*b )
Ø
Ø{
Ø
Østruct In*c = (In *)a;
Ø
Østruct In*d = (In *)b;
Ø
Øif(c->x!= d->x) return c->x - d->x;
Ø
Øelsereturn d->y - c->y;
Ø
Ø}
Ø
Øqsort(s,100,sizeof(s[0]),cmp);
Ø);
Ø
Ø六、对字符串进行排序
Ø
Østruct In
Ø
Ø{
Ø
Øint data;
Ø
Øcharstr[100];
Ø
Ø}s[100];
Ø
Ø//按照结构体中字符串str的字典顺序排序
Ø
Øint cmp ( const void *a , constvoid *b )
Ø
Ø{
Ø
Øreturnstrcmp( (*(In *)a)->str, (*(In *)b)->str );
Ø
Ø}
Ø
Øqsort(s,100,sizeof(s[0]),cmp
Ø七、计算几何中求凸包的cmp
Ø
Øint cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转
Ø角度排序
Ø
Ø{
Ø
Østruct point *c=(point *)a;
Ø
Østruct point *d=(point *)b;
Ø
Øif(calc(*c,*d,p[1])< 0) return 1;
Ø
Øelseif( !calc(*c,*d,p[1])&& dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p
Ø[1].x,p[1].y))//如果在一条直线上,则把远的放在前面
Ø
Øreturn1;
Ø
Øelsereturn -1;
Ø
}- 调用函数库中的快速排序算法qsort()排序各种数据类型
- 函数库的排序调用 sort qsort
- 快速排序算法(qsort)
- 快速排序算法(Qsort)
- 快速排序qsort算法实例
- 编译器函数库自带的快速排序函数qsort
- 各种快速排序算法
- 调用库函数进行的qsort快速排序
- 快速排序qsort用法
- 快速排序 qsort
- 快速排序法qsort
- qsort快速排序
- qsort 快速排序
- 关于快速排序qsort
- qsort 快速排序法
- qsort 快速排序
- 快速排序qsort
- qsort快速排序
- 素数的sas实现
- vim 命令(全)
- Segmentation Fault in Linux(3.如何避免SIGSEGV)
- 飞机绕地飞行一周问题
- container_of()宏
- 调用函数库中的快速排序算法qsort()排序各种数据类型
- vim 使用技巧 部分总结
- 上传所需要的函数
- SQL语句删除重复记录
- 学习嵌入式系统需要具备的条件、方法及步骤
- C++一维数组的实现
- 提升效率的若干Vim技巧
- 个人修养
- Web导出(三)之 iText将HTML文件转PDF