在日常学习中要经常用到sort函数,每次用都要重新查一遍,因此在这里整理下,方便日后自己的查阅,也与大家一起分享。
1、头文件
c++中的sort函数包含在头文件algorithm中,具体引用方式如下:
#include <algorithm>
using namespace std;
2、普通数组排序
对于普通的数组,需要传入两个位置,且是左闭右开的,默认排序为从小到大。若arr中有10个元素,则排序方法如下:
sort(arr, arr + 10);//区间左闭右开,默认从小到大排序
sort(arr, arr + 10, greater<int>());//使sort从大到小排序
3、vector数组排序
与普通数组类似:
sort(arr.begin(), arr.end());//从小到大
sort(arr.begin(), arr.end(), greater<int>());//从大到小
4、复合数据类型
对于复合的数据类型,需要自定义比较规则:
struct Data{
int x, y;//定义数据类型
}
bool cmp(const Data &a, const Data &b){//定义排序规则
if(a.x != b.x) return a.x < b.x;//按照x从小到大排
return a.y > b.y;//如果x相同,则y从大到小排
}
sort(arr.begin(), arr.end(), cmp);
5、对下标排序
为了不改变原来的arr数组,可以对arr的下标数组进行排序:
int ind[10];
for(int i = 0; i < 10; i++) ind[i] = i;//生成下标数组
sort(ind, ind + 10, [&](int i, int j) -> bool{//利用lambda表达式进行排序
return arr[i] < arr[j];
});
最后,关于各种排序算法具体的实现原理及其复杂度,可以参考上方连接。