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 稳定排序。