【C++中sort排序的使用】笔记

头文件
#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++的标准库里提供了一堆基于模板的比较函数对象,有兴趣可以去了解一下,此处省略。


 

发布了38 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41514794/article/details/104682690