c++ sort

1. 单数组或者vector排序

跟java的差不多,java的详见java数组排序,但是c++是stl ,算法跟容器分离,所以参数是迭代器,数组的话是头尾指针。

sort(a,a+n);

默认从小到大,如果要从大到小,定义一个比较函数返回bool即可:

bool my_greater(int i,int j){
    return i>j;
}
sort(a, a + n, my_greater);

或者用内置的greater,也可以。

sort(a,a+5,greater<int>{});

vector的话用v.begin(),v.end()来操作。
还是挺方便的。

2. 结构体排序

结构体的话稍微复杂一点点。

bool g( Chengji c1 ,Chengji c2){
    int s1 = c1.x+ c1.y+ c1.z;
    int s2 = c2.x + c2.y +c2.z;
    if(s1!=s2)return s1>s2;

    if(c1.x != c2.x) return c1.x>c2.x;
    return c1.id < c2.id;
}
// 
sort(a,a+n,g)

还一种是运算符重载,重载小于即可,因为sort 默认调用< 来进行排序。

struct B{
    ...
       
    bool operator< (const Person& W)const
    {
        if (total != W.total) return total > W.total;
        if (chinese != W.chinese) return chinese > W.chinese;
        return id < W.id;
    }
}

典型题目是acw 429题

3. partial_sort

有时候你不想全部都排序,只要前k个元素是有序的,那么可以用partial_sort,比如hdu的1425这题,用partial_sort的话会比sort全排要快上200ms。
三个参数,第二个传入k位索引即可:

partial_sort(a,a+k, a + n, my_greater);

4. 其他排序

stable_sort 稳定排序。

原文地址:https://www.cnblogs.com/gqdw/p/14285903.html