sort排序问题
前言:
其实sort排序应该是我接触最早的排序,写这篇是为了规范一下用法。
1.sort的注意事项
sort没有返回值,不需要用变量去记录结果。
sort的时间复杂度是:O(nlog n)。
排序范围是[begin,end),不包括end这个元素。
2.sort的比较函数
假设有int数组,int a[10] sort的格式一般是sort(a,a+num,f(x)),函数可以省略,默认为从小到大排序。 如果要从大到小排序,可以用系统自带的greater() 即sort(a,a+mun,greater<int>()) 也可以自定义一个大于,如: bool my_greater(int x,int y){ return (a>b); } sort(a,a+num,my_greater)//注意格式上的区别这里greater后面没有()
sort还可以对结构体排序
//但是一般比较函数要自己写 struct Student{ string name; int age; }; bool my_greater(struct Student*a,struct Student*b){ return a->age > b->age; } sort(a.begin(),a.end(),my_greater)//同样my_greater后面没有()
3.相关函数
<1>stable_sort()
当排序元素相等时,保留原来的顺序,在对结构体排序时,当结构体中的排序元素相等时,如果需要保留原序,可以用这个。
<2>partial_sort()
局部排序。如10个数字需要输出最小的5个数,sort()的话需要全部排序在输出前五个,这个可以直接输出前五个。