头文件
#include <algorithm>
三个参数
sort(buf, buf+n, cmp);
1)buf:待排序数组的首地址,待排序数组元素共n个。
2)buf+n:此处是重点,这个参数不是待排序数组的最后一个元素的地址,而是最后一个元素的后地址。简单来讲,可以理解为 [buf, buf+n) ,即这里两个参数表示的意义是左闭右开。
3)cmp:排序方法,这个参数可以省略,省略后默认从小到大排序。也可以自己写一个比较函数来实现,具体见下面的例子。
例子
1)省略参数,默认从小到大排序
int a[6]={2,9,8,4,6,7};
sort(a,a+6);
排序后:2,4,6,7,8,9
2)使用比较函数
//less<int>()
bool cmp_up(int a,int b)//升序排序
{
return a<b;
}
//greater<int>()
bool cmp_down(int a,int b)//降序排序
{
return a>b;
}
//调用方法
sort(a,a+6,cmp_up);
sort(a,a+6,cmp_down);
3)结构体排序
成绩排序输出编号
#include <iostream>
#include <algorithm>
using namespace std;
struct stu{
int num;
int score;
};
bool cmp(stu t1,stu t2){
return t1.score > t2.score;
}
int main(){
int n;
stu a[101];
cin >> n;
for(int i = 0;i < n;i++){
cin >> a[i].score;
a[i].num = i+1;
}
sort(a,a+n,cmp);
for(int i = 0;i < n;i++){
if(i == 0)
cout << a[i].num;
else
cout << " " << a[i].num;
}
return 0;
}
小结
1)sort() 是C++里一种类似快速排序的排序方法,复杂度能到O(nlogn) 。使用起来比qsort更简单,所以强推这个函数。
2)注意第二个参数不是最后一个元素的地址,否则最后一个元素将不参与排序。
3)比较函数其实可以不用自己写,C++的标准库里提供了一堆基于模板的比较函数对象,有兴趣可以去了解一下,此处省略。