sort与qsort的应用

转载 2015年07月07日 15:14:46

一、qsort

1.int

  1. int num[100];   
  2.   
  3. int cmp ( const void *a , const void *b )   
  4. {   
  5. return *(int *)a - *(int *)b; //升序排列。if(a>b) return true  
  6. }   
  7.   
  8. qsort(num,100,sizeof(num[0]),cmp);   


2.char

  1. char word[100];   
  2. int cmp( const void *a , const void *b )  
  3. {   
  4.     return *(char *)a - *(int *)b;   
  5. }   
  6. qsort(word,100,sizeof(word[0]),cmp);   


3.double

  1. double in[100];   
  2. int cmp( const void *a , const void *b )   
  3. {   
  4.     return *(double *)a > *(double *)b ? 1 : -1;   
  5. }   
  6. qsort(in,100,sizeof(in[0]),cmp);   


4.结构体

 

  1. struct Nation  
  2. {  
  3.     int jin;  
  4.     int jiang;  
  5.     int people;  
  6.     int index;  
  7.     int num[6];  
  8. };  
  9.   
  10.   
  11. int mode;  
  12. int comp(const void *A,const void* B)  
  13. {  
  14.     struct Nation* a=(Nation*)A;  
  15.     struct Nation* b=(Nation*)B;  
  16.   
  17.   
  18.     switch(mode)//都是降序  
  19.     {  
  20.     case 1:   
  21.         return b->jin-a->jin;  
  22.     case 2:  
  23.         return b->jiang-a->jiang;  
  24.     case 3:  
  25.         return b->jin*a->people-a->jin*b->people;  
  26.     case 4:  
  27.         return b->jiang*a->people-a->jiang*b->people;  
  28.     }  
  29. }  
  30. qsort(s,100,sizeof(s[0]),cmp);   


5、对字符串进行排序

  1. char str[100][100];  
  2. int cmp(const void* a,const void* b )  
  3. {  
  4.            return strcmp((char *)a,(char*)b);  
  5. }  
  6. qsort(str,n,sizeof(str[0]),cmp);  

 

值得注意的是,上面的n,很有可能你会误认为是100,这里实际应该是你要排序的个数,比如说你实际上只有str[0],str[1],str[2]这三个字符串要排序,那么n就应该是3,而不是100;

 

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);

 

二、sort

方法和qsort类似,std::sort是一个改进版的qsort. std::sort函数优于qsort的一些特点:对大数组采取9项取样,更完全的三路划分算法,更细致的对不同数组大小采用不同方法排序。

  1. bool compare(int a,int b)  
  2. {  
  3.   return a>b; //降序排列,如果改为return a<b,则为升序  
  4. }  


  1. struct Nation  
  2. {  
  3.     int jin;  
  4.     int jiang;  
  5.     int people;  
  6.     int index;  
  7.     int num[6];  
  8. }c[100];  
  9.   
  10. int mode;  
  11. bool comp(const Nation &a,const Nation& b)  
  12. {  
  13.     switch(mode)\\都是降序  
  14.     {  
  15.     case 1:   
  16.         return a.jin>b.jin;  
  17.     case 2:  
  18.         return a.jiang>b.jiang;  
  19.     case 3:  
  20.         return a.jin*b.people>b.jin*a.people;  
  21.     case 4:  
  22.         return a.jiang*b.people>b.jiang*a.people;  
  23.     }  
  24. }  
  25.   
  26.   
  27. sort(c,c+m,comp);  



诺~同是降序,sort的comp函数是a>b而qsort的函数是return b-a;

最后,还是推荐用sort!

 =================================================================================================================

具体来说可以用下面这个例子说明两个实现相同功能的sort和qsort

  1. #include "iostream"  
  2. #include "algorithm"  
  3. #include "time.h"  
  4. using namespace std;  
  5.   
  6. int comp(const void *a,const void *b)  
  7. {  
  8.     return *(int *)b-*(int *)a;  
  9. }  
  10.   
  11. bool cmp(int a,int b)  
  12. {  
  13.     return a>b;  
  14. }  
  15.   
  16. int main()  
  17. {  
  18.     int n,m,i,j;  
  19.     int a[1000];  
  20.     srand((unsigned) time(NULL));  
  21.     n=10;  
  22.     printf("origin:\t");  
  23.     for(i=0;i<n;i++)  
  24.     {  
  25.         a[i]=rand()%1000;  
  26.         printf("%d ",a[i]);  
  27.     }  
  28.     cout<<endl;  
  29.     qsort(a,10,sizeof(a[0]),comp);  
  30.     printf("qsort:\t");  
  31.     for (i=0;i<n;i++)  
  32.     {  
  33.         printf("%d ",a[i]);  
  34.     }  
  35.     printf("\nsort:\t");  
  36.     sort(a,a+9,cmp);  
  37.     for (i=0;i<n;i++)  
  38.     {  
  39.         printf("%d ",a[i]);  
  40.     }  
  41.     cout<<endl;  

对于qsort和sort使用效率的详细对比

测试环境 VS2017 思路:用qsort与sort分别对有n个随机数的数组进行m次排序。 平台:x64sort:头文件: algorithm 函数原型:template< class Rand...
  • qq_26341675
  • qq_26341675
  • 2017年04月17日 00:00
  • 801

qsort和sort函数用法区别

区别 sort是qsort的升级版,如果能用sort尽量用sort,使用也比较简单,不像qsort还得自己去写 cmp 函数, 只要注明  使用的库函数就可以使用,参数只有两个(如果是普通用法)头...
  • u014082714
  • u014082714
  • 2015年03月31日 14:04
  • 1983

浅谈C++中qsort与sort的使用方法与区别

这两天在刷leetcode时看到了一些关于排序的题目,其中遇到各种大神对sort与qsort的使用,个人在使用时对比发现了一些sort与qsort的区别,并对它们的使用方法进行了一些总结介绍。 在平...
  • lkn910907
  • lkn910907
  • 2015年03月05日 17:01
  • 1987

qsort与sort效率用法比较

qsort与sort效率用法比较
  • PKU_ZZY
  • PKU_ZZY
  • 2016年05月20日 16:00
  • 1196

sort()/qsort()函数的用法及cmp比较函数的写法

转自:白马王的博客 一、STL中的sort函数: 头文件:#include Tips:    STL中的sort函数有两种:    templateRanIt>        void sort...
  • Jessie_is_Gemini
  • Jessie_is_Gemini
  • 2016年03月01日 20:59
  • 2180

测试std::sort 和std::qsort 的性能, 修改编译器栈大小

根据effective STL中Item 46 提到, C程序员很难接受C++的STL中std::sort(定义于头文件)竟然比C语言的std::qsort(定义与头文件中)快了670%。 最后Sco...
  • a130737
  • a130737
  • 2015年03月03日 18:36
  • 977

C++ 排序函数 sort(),qsort()的用法

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:     函...
  • wordwarwordwar
  • wordwarwordwar
  • 2014年11月10日 09:50
  • 3618

ACM排序算法sort()与qsort()用法

这个礼拜讲的是排序,学长给讲了讲qsort的用法,在排序中首先考虑的就是qsort,所以百度总结了一下,给大家分享下。 1、sort()和qsort()比较,哪个效率高? sort函数的效率更高吧...
  • hao7051284
  • hao7051284
  • 2014年10月14日 20:00
  • 1896

浅谈sort()与qsort()的应用

现在写代码时,经常会用到排序算法,而每次都敲出一个快排或归并等排序算法太麻烦了(虽然我存了不少代码,但总要做一些修改,挺麻烦的)。但c++中有两个函数,可以简单的完成排序,那就是sort()和qsor...
  • ca2009ai
  • ca2009ai
  • 2017年06月30日 22:09
  • 87

linux内核中的排序接口--sort函数

linux内核中的sort函数,其实跟我们所说的qsort函数很像,我们来看看qsort: qsort 的函数原型是 void qsort(void*base,size_t num,s...
  • morixinguan
  • morixinguan
  • 2016年02月17日 20:34
  • 2979
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sort与qsort的应用
举报原因:
原因补充:

(最多只允许输入30个字)