- 3
- 0
- 约5.3千字
- 约 7页
- 2018-03-16 发布于江苏
- 举报
qsortsort区别
qsort和sort学习与比较
1.qsort函数:
原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
功 能: 使用快速排序例程进行排序
参 数:
1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
说 明:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)。
qsort要求提供的函数是需要自己定义的一个比较函数,比较函数使得qsort通用性更好。有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。如int cmp(const void *a, const void *b)中有两个元素作为参数(参数的格式不能变的。)返回一个int值,如果比较函数返回大于0,qsort就认为a b,返回小于0,qsort就认为a b。qsort知道元素的大小了,就可以把大的放前面去。如果你的比较函数返回本来应该是1的(即a b),而却返回-1(小于0的数),那么qsort认为a b,就把b放在前面去,但实际上是a b的,所以就造成了降序排序的差别了。简单来说,比较函数的作用就是给qsort指明元素的大小事怎么比较的。
?
2.qsort中几种常见的cmp函数:
一、对int类型数组排序 int num[100];int cmp ( const void *a , const void *b ){return *(int *)a - *(int *)b;}qsort(num,100,sizeof(num[0]),cmp); 二、对char类型数组排序(同int类型) char word[100];int cmp( const void *a , const void *b ){return *(char *)a - *(int *)b;}qsort(word,100,sizeof(word[0]),cmp);三、对double类型数组排序(特别要注意) double in[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;else return d-y - c-y;}qsort(s,100,sizeof(s[0]),cmp); 六、对字符串进行排序 struct In
{int data;char str[100];}s[100];//按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ){return strcmp( (*(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;else if( !calc(*c,*d,p
您可能关注的文档
最近下载
- 2026年黑龙江农垦职业学院单招职业技能考试题库附答案.docx VIP
- 在带头强化政治忠诚、提高政治能力等“五个带头”方面个人对照检查材料【两篇】供参考2026.docx VIP
- 大病低保申请书.docx VIP
- 盐酸(31%)安全技术说明书.doc VIP
- 解读GB 6441-2025《生产安全事故分类与编码》.pptx
- FUJITSU 富士通存储系统ETERNUS DX60 S4 DX100 S4 DX200 S4, ETERNUS DX60 S3 DX100 S3 DX200 S3, ETERNUS DX500 S3 DX600 S3, ETERNUS DX8100 S3 DX8700 S3 DX8900 S3, ETERNUS AF250 AF650, ETERNUS DX200F 用户手册.pdf VIP
- 伟格仕纺织助剂技术中心.ppt VIP
- 人教版初中文言文及译文大全.pdf VIP
- 数控加工基础培训课件.pptx
- 一种基于磁场测量的直流电缆的三维重构和成像方法.pdf VIP
原创力文档

文档评论(0)