首页 > 代码库 > 排序函数sort用法简介

排序函数sort用法简介

排序算法有很多,冒泡排序,选择排序,堆排序,快速排序,归并排序,基数排序……

其中平均复杂度O(nlogn)的排序算法或者在某方面有特殊优势的算法在ACM中才有实际使用价值,所以上述提到的前2种大家以后就不要用了。其他排序算法大家会慢慢接触,本文主要介绍使用最多的排序函数 sort。大家可能会遇到qsort,qsort比较复杂,逐渐淡出ACMer的视线,所以不用管它。

sort函数是C++标准库函数,需要包含头文件 #include <algorithm> 并声明命名空间 using namespace std;

using namespace std;紧跟在#include <algorithm>之后

 

举例:

#include <stdio.h>

#include <algorithm>

using namespace std;



int main ()

{

  return 0;

}

 

排序中有一个重要的概念:稳定排序和不稳定排序。

稳定排序:大小相等的元素在被排序后前后位置关系不变

不稳定排序:大小相等的元素在被排序后前后位置关系可能改变

 

sort() 是不稳定排序,稳定排序函数是 stable_sort()

sort() 的排序对象可以是任何数据类型,int , __int64 ,  long long , char , double , string , 结构体……

 

1.默认的sort函数是按升序排,这时需要传递两个参数。

下面这句的作用是对数组元素a[0]~a[n-1]进行升序排序

sort(a,a+n);   //两个参数分别为待排序数组的首地址和尾地址

下面这句的作用是对数组元素a[1]~a[n]进行升序排序

sort(a+1,a+n+1);  //注意体会参数的含义和特点。

 

2.可以自己写一个cmp函数,按特定意图进行排序。这时需要传递三个参数,第三个参数为自己定义的比较函数的名字。

这个自己写的比较函数返回值应该为真(非0)或假(0),传入参数应该有两个,具体写法参照下面的代码。

这个比较函数的写法很固定,大家不理解可以先背下来。这个函数会在sort函数执行时自动调用。

 

注意比较函数是自己定义的函数,和其他函数一样,写在主函数外面……
例如:

对数组a降序排序:

int cmp ( const int &a, const int &b )

{
    if ( a > b )
       return 1;
    else
       return 0;
}
sort(a,a+n,cmp);

 

或者写作:

bool cmp ( const int &a, const int &b )

{
    return a > b;
}

int mian ()
{
    sort(a,a+n,cmp);
}

 

又如:先按x升序排序,若x值相等则按y升序排,其中a为结构体数组,其中有x,y两个元素:

int cmp ( const POINT &a, const POINT &b ) //POINT为自己定义的结构体

{
    if( a.x < b.x )
       return 1;
    else
       if( a.x == b.x ){
          if( a.y < b.y )
             return 1;
          else
             return 0;
        }
       else
          return 0;
}
sort(a,a+n,cmp);

 

或者写作:

bool  cmp ( const POINT &a, const POINT &b ) //POINT为自己定义的结构体

{
    if (a.x==b.x) return  a.y < b.y ;
    return  a.x < b.x;
}
sort(a,a+n,cmp);