C函数qsort的简介和用,新手入门.pptVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C函数qsort的简介和用法 BY:SMJUN C函数qsort实现快速排序 排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序 是目前公认的一种比较好的排序算法,比选择排序,冒泡排序都要快。因为它的速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort。 qsort简介 qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为: void qsort(void *base,size_t nelem,size_t width, cmp); *base 为要排序的数组 nelem 为要排序的数组的长度 width 为数组元素的大小(一字节为单位) 简单示例:对int num[100]排序,qsort中各参数怎么写? qsort(num,100,sizeof(num[0]),cmp); 自定义比较函数 比较函数的名字是自定义的(这里我们用CMP命名); Cmp:qsort 要求提供的这个函数是一个需要自己定义的比较函数,比较函数使得qsort通用性更好。有了比较函数qsort可以实现对数组,字符串,结构体等结构进行升序或降序排序。 Int Cmp(const void *a , const void *b )中有两个元素作为参数,返回一个int值, 如果比较函数返回大于0,qsort就认为 ab , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 ab 。 qsort 知道元素大小,就可以把大的放到前面去。 如果你的比较函数放回本来应该是1 的(ab),你比较函数却返回一个 -1 (小于零的)那么qsort认为ab 的,就把 b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了。 简单来说,比较函数的作用就是给qsort指明元素的大小是怎么比较的。 qsort简单实例 应用qsort对int数组进行排序: #include stdio.h #include stdlib.h int cmp_1 ( int *a , int *b ) { return *a - *b; } int cmp_2 ( int *a , int *b ) { return *b - *a; } void main() { int num[10]={1,3,5,7,9,2,4,6,8,0}; int i; qsort(num,10,sizeof(num[0]),cmp_1);//从小到大 for(i=0;i10;i++) printf(%d ,num[i]); printf(\n); qsort(num,10,sizeof(num[0]),cmp_2);//从大到小 for(i=0;i10;i++) printf(%d ,num[i]); printf(\n); } * 简单示例:对int num[100]中的元素从小到大排序。 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; //强制转换类型 } qsort(num,100,sizeof(num[0]),cmp); Cmp()定义了两个const void(类型为空)的指针*a和*b; 在*(int *)a - *(int *)b; 这句中把指针强制转换为 int型; 我们可以将const void 改为你需要排序对象的类型; int num[100]; int cmp ( int *a , int *b ) { return *a - *b; } qsort(num,100,sizeof(num[0]),cmp); 如果要对num[100]中的元素从大到小排序,只需要将return *a - *b改为 return *b -*a 就可以实现; 应用qsort对char数组进行排序: #include stdio.h #include stdlib.h int cmp_1 ( char *a , char *b ) { return *a - *b; } int cmp_2 ( char *a , char *b ) { return *b - *a; } void main() { char ch[10]={bcadfegihj}; int i; qsort(ch,10,sizeof(ch[0]),cmp_1);//从小到大 fo

您可能关注的文档

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档