快排是我们平常敲代码和比赛的时候     经常使用到的方法

qsort是函数库中自带的函数    这是一个标准的快排函数

而sort比qsort更是好用    sort对于不同大小的数组   会使用不同的排序方法

所以我在使用sort之后   就没有使用过qsort了

我今天在这回顾一下qsort 和sort 的使用方法

qsort排序方法(升序)

一、对int类型数组排序

int num[10010];

int cmp ( const void *a , const void *b )

{

return *(int *)a - *(int *)b;

}

qsort(num,10010,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;

返回值的问题,显然cmp返回的是一个整型,所以避免double返回小数而被丢失。 

来一个判断。 

}

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

六、对字符串进行排序

char str[100][100];

int cmp(const void* a,const void* b )

{

return strcmp((char *)a,(char*)b);

}

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

注意!qsort 中的  cmp 得自己写 。

Second sort

sort 使用时得注明:using namespace std;   或直接打 std::sort()  还得加上  #include <algorithm>

例:

#include<iostream>

#include<algorithm>

using namespace std;

int main(){

int a[20];

for(int i=0;i<20;++i)

cin>>a[i];

sort(a,a+20);          //范围,很明显这里是a+20 注意,这是必要的,如果是a+19

for(i=0;i<20;i++)        //最后一个值a[19]就不会参与排序。

cout<<a[i]<<endl;

return 0;

}

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

typedef struct index
{
    int a,b;
}index;
 
bool cmp(index a , index b)
{
    if (a.a > b.a )
    {
        return true;
    }
    else
        if ( a.a == b.a  )
        {
            if (a.b > b.b )
            {
                return true ;
            }
        }
    return false ;
}
sort( c , c+100 , cmp );

Third  区别:

sort是qsort的升级版,如果能用sort尽量用sort,使用也比较简单,不像qsort还得自己去写 cmp 函数,只要注明  使用的库函数就可以使用,参数只有两个(如果是普通用法)头指针和尾指针;

默认sort排序后是升序,如果想让他降序排列,可以使用自己编的cmp函数

bool compare(int a,int b)

{

return a>b; //降序排列,如果改为return a<b,则为升序

}

sort(*a,*b,cmp);

最新文章

  1. GitHub中国区前100名到底是什么样的人?
  2. 对于类的双重调用的demo
  3. 什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法
  4. SQL 插入日期时间 变量值
  5. cxGrid使用汇总(一)
  6. ipconfig
  7. windows配置jdk
  8. Unicode汉字编码表
  9. 关于Winform中的用户代理
  10. Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration &amp; @Bean注解
  11. java实现自动生成小学四则运算——朱庭震,詹祺豪
  12. hdu2955 Robberies(背包)
  13. Java中 接口是如何实现多态的特性的
  14. django通用权限控制框架
  15. 【BZOJ2003】[HNOI2010]矩阵(搜索)
  16. C++中关键字explicit的作用
  17. Ubuntu 编译安装 nDPI
  18. 51nod 1584加权约数和
  19. 三篇文章了解 TiDB 技术内幕——说存储
  20. (收藏)mci 录音和播放

热门文章

  1. Java检查异常、非检查异常、运行时异常、非运行时异常的区别
  2. swift函数式编程之compose
  3. Arduino在串口监视器上输出字母表
  4. Codechef July Challenge 2019 Hit the Coconuts
  5. Numpy | 12 数组操作
  6. C++后端工程师需要看的书籍
  7. 【JZOJ6245】【20190627】A
  8. centos7 出现“FirewallD is not running”
  9. [sdoi 2017]树点涂色
  10. [后渗透]Windows server 80端口复用后门