C语言标准库函数qsort排序的介绍与使用.docx

C语言标准库函数qsort排序的介绍与使用.docx

ID:51687567

大小:33.50 KB

页数:5页

时间:2020-03-15

C语言标准库函数qsort排序的介绍与使用.docx_第1页
C语言标准库函数qsort排序的介绍与使用.docx_第2页
C语言标准库函数qsort排序的介绍与使用.docx_第3页
C语言标准库函数qsort排序的介绍与使用.docx_第4页
C语言标准库函数qsort排序的介绍与使用.docx_第5页
资源描述:

《C语言标准库函数qsort排序的介绍与使用.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C语言标准库函数qsort排序的介绍与使用2007-05-2219:24qsort函数包含在的头文件里。qsort函数声明如下:voidqsort(void*base,size_tnmemb,size_tsize,int(*compar)(constvoid*,constvoid*));参数说明如下:base:要排序的数组nmemb:数组中的元素数目size:每个数组元素占用内存空间,可使用sizeof获得compar:比较两个数组元素的比较函数。本比较函数的第一个参数值小于、等于、大于第二参数值时,本比较函数的返回值应分别小于、等于、

2、大于零。也就说你要实现一个这样的函数(升序):intcmp(constvoid*a,constvoid*b)如果a>b,返回>0如果a==b,返回0如果a一、对int类型数组排序intnum[100];Sample:intcmp(constvoid*a,constvoid*b){      return*(int*)a-*(int*)b;}qsort(num,100,sizeof(num[0]),cmp);对一个二维数组

3、的进行排序:inta[1000][2];其中按照a[i][0]的大小进行一个整体的排序,其中a[i][1]必须和a[i][0]一起移动交换。qsort(a,1000,sizeof(int)*2,comp);intcomp(constvoid*a,constvoid*b){    return((int*)a)[0]-((int*)b)[0];}二、对char类型数组排序(同int类型)charword[100];Sample:intcmp(constvoid*a,constvoid*b){      return*(char*)a-*(char*)b;}q

4、sort(word,100,sizeof(word[0]),cmp);三、对double类型数组排序(特别要注意)doublein[100];intcmp(constvoid*a,constvoid*b){      return*(double*)a>*(double*)b?1:-1;}qsort(in,100,sizeof(in[0]),cmp);四、对结构体一级排序structIn{doubledata;intother;}s[100]//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写int

5、cmp(constvoid*a,constvoid*b){      return(*(In*)a).data>(*(In*)b).data?1:-1;}qsort(s,100,sizeof(s[0]),cmp);五、对结构体二级排序structIn{intx;inty;}s[100];//按照x从小到大排序,当x相等时按照y从大到小排序intcmp(constvoid*a,constvoid*b){structIn*c=(In*)a;structIn*d=(In*)b;if(c->x!=d->x)returnc->x-d->x;elsereturnd->

6、y-c->y;}qsort(s,100,sizeof(s[0]),cmp);六、对字符串进行排序structIn{intdata;charstr[100];}s[100];//按照结构体中字符串str的字典顺序排序intcmp(constvoid*a,constvoid*b){      returnstrcmp((*(In*)a).str,(*(In*)b).str);}qsort(s,100,sizeof(s[0]),cmp);七、计算几何中求凸包的cmpintcmp(constvoid*a,constvoid*b)//重点cmp函数,把除了1点外的所

7、有点,旋转角度排序{structpoint*c=(point*)a;structpoint*d=(point*)b;if(calc(*c,*d,p[1])<0)return1;elseif(!calc(*c,*d,p[1])&&dis(c->x,c->y,p[1].x,p[1].y)x,d->y,p[1].x,p[1].y))//如果在一条直线上,则把远的放在前面return1;elsereturn-1;}众所周知,C语言中qsort是在一个数组中以升序对数据进行排序。有时我们也需要以降序的方式来排序数据,只要一个小小的改动就可以实现。先来

8、看看一个例子程序,它以升序的方式对整型数组进行排序的。#inclu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。