《C函数qsort的简介和用法,新手入门.pptx》由会员分享,可在线阅读,更多相关《C函数qsort的简介和用法,新手入门.pptx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C函数qsort的简介和用法 BY:SMJUNC函数qsort的简介和用法,新手入门共11页,您现在浏览的是第1页!C函数qsort实现快速排序排序方法有很多种:选择排序,冒泡排序,排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。归并排序,快速排序等。看名字都知道快速排序看名字都知道快速排序 是目前公认的一种是目前公认的一种比较好的排序算法,比选择排序,冒泡排比较好的排序算法,比选择排序,冒泡排序都要快。因为它的速度很快,所以系统序都要快。因为它的速度很快,所以系统也在库里实现这个算法,便于我们的使用。也在库里实现这个算法,便于我们的使用。这就是这就是qsort。C函数qsort的
2、简介和用法,新手入门共11页,您现在浏览的是第2页!qsort简介qsort函数是函数是ANSI C标准中提供的,其声明在标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂文件中,是根据二分发写的,其时间复杂度为度为n*log(n),其结构为:其结构为:void qsort(void*base,size_t nelem,size_t width,cmp);*base 为要排序的数组为要排序的数组nelem 为要排序的数组的长度为要排序的数组的长度width 为数组元素的大小(一字节为单位)为数组元素的大小(一字节为单位)简单示例:对简单示例:对int num100排序,
3、排序,qsort中各参数中各参数怎么写?怎么写?qsort(num,100,sizeof(num0),cmp);C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第3页!自定义比较函数比较函数的名字是自定义的(这里我们用CMP命名);Cmp:qsort 要求提供的这个函数是一个需要要求提供的这个函数是一个需要自己定义自己定义的的比较函比较函数数,比较函数使得,比较函数使得qsort通用性更好。有了比较函数通用性更好。有了比较函数qsort可以实可以实现对数组,字符串,结构体等结构进行升序或降序排序。现对数组,字符串,结构体等结构进行升序或降序排序。Int Cmp(const voi
4、d*a,const void*b)中有两个元素作为参数,中有两个元素作为参数,返回一个返回一个int值,值,如果比较函数返回大于如果比较函数返回大于0,qsort就认为就认为 ab,如果比较函数返回等于如果比较函数返回等于0 qsort就认为就认为a 和和b 这两个元素相等,返这两个元素相等,返回小于零回小于零 qsort就认为就认为 ab),你比较函数却返回你比较函数却返回一个一个-1(小于零的)那么(小于零的)那么qsort认为认为ab 的,就把的,就把 b放到前面去,放到前面去,但实际上是但实际上是a大于大于b的,所以就造成升降序的差别了。的,所以就造成升降序的差别了。简单来说,比较函数
5、的作用就是给简单来说,比较函数的作用就是给qsort指明元素的大小是怎么指明元素的大小是怎么比较的。比较的。C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第4页!qsort简单实例应用应用qsort对对int数组进行排序:数组进行排序:#include#include int cmp_1(int*a,int*b)return*a-*b;int cmp_2(int*a,int*b)return*b-*a;void main()int num10=1,3,5,7,9,2,4,6,8,0;int i;qsort(num,10,sizeof(num0),cmp_1);/从小到大for(
6、i=0;i10;i+)printf(%d,numi);printf(n);qsort(num,10,sizeof(num0),cmp_2);/从大到小for(i=0;i10;i+)printf(%d,numi);printf(n);C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第5页!应用应用qsort对结构体一级排序:对结构体一级排序:#include#include struct coordint x;int y;data100;int cmp(struct coord *a,struct coord *b)/根据根据y的大小排序的大小排序 return a-y-b-y;v
7、oid main()int sum=0,n;int i,j;/freopen(in.txt,r,stdin);while(scanf(%d,&n)!=EOF&n)for(i=0;in;i+)scanf(%d%d,&datai.x,&datai.y);for(i=0;in;i+)printf(%d%d ,datai.x,datai.y);printf(n);qsort(data,n,sizeof(data0),cmp);for(i=0;istr,(*(In*)b)-str);qsort(s,100,sizeof(s0),cmp);strcmp包含在包含在的头文件里的头文件里 C函数qsort的简
8、介和用法,新手入门共11页,您现在浏览的是第7页!简单示例:对简单示例:对int num100中的元素从小到大排序。中的元素从小到大排序。int num100;int cmp(const void*a,const void*b)return*(int*)a -*(int*)b;/强制转换类型强制转换类型 qsort(num,100,sizeof(num0),cmp);Cmp()定义了两个const void(类型为空)的指针*a和*b;在*(int*)a-*(int*)b;这句中把指针强制转换为 int型;我们可以将const void 改为你需要排序对象的类型;int num100;int
9、cmp(int*a,int*b)return*a -*b;qsort(num,100,sizeof(num0),cmp);如果要对num100中的元素从大到小排序,只需要将return*a-*b改为return*b-*a 就可以实现;C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第8页!应用应用qsort对对char数组进行排序:数组进行排序:#include#include int cmp_1(char*a,char*b)return*a-*b;int cmp_2(char*a,char*b)return*b-*a;void main()char ch10=bcadfegih
10、j;int i;qsort(ch,10,sizeof(ch0),cmp_1);/从小到大for(i=0;i10;i+)printf(%c,chi);printf(n);qsort(ch,10,sizeof(ch0),cmp_2);/从大到小for(i=0;i10;i+)printf(%c,chi);printf(n);C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第9页!应用应用qsort对结构体二级排序:对结构体二级排序:#include#include struct coordint x;int y;data100;int cmp(struct coord *a,struc
11、t coord *b)if(a-x!=b-x)return a-x-b-x;/按照按照x从小到大排序,当从小到大排序,当x相等时按照相等时按照y从大到小排序从大到小排序 else return a-y-b-y;void main()int sum=0,n;int i,j;freopen(in.txt,r,stdin);while(scanf(%d,&n)!=EOF&n)for(i=0;in;i+)scanf(%d%d,&datai.x,&datai.y);for(i=0;in;i+)printf(%d%d ,datai.x,datai.y);printf(n);qsort(data,n,sizeof(data0),cmp);for(i=0;in;i+)printf(%d%d ,datai.x,datai.y);printf(n);输入:输入:52 22 14 33 94 20C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第10页!END C函数qsort的简介和用法,新手入门共11页,您现在浏览的是第11页!
限制150内