sort的實現是基於快速排序的,快速排序在比較算法中算是速度最快的,平均的時間複雜度爲O(nlogn),雖然它的最差時間複雜度可能達到O(n2)。
stable_sort的實現是基於歸併排序的,它的時間複雜度爲O(nlogn),一般情況下,它比快速排序稍慢。但是它是一種穩定排序,所謂穩定排序,就是說相同大小的元素,在排序前後的相對位置不會發生改變。即相同大小的元素中,原來在前的元素,排序之後還是在前面。
它們使用時都需要#include<algorithm>
不過你可能會有疑問,既然是一樣的元素,爲何我們還有管誰前誰後?因爲這裏我們所說的一樣,是指在比較的時候大小一樣,並不一定就是說這兩個元素完全一樣,比如我們有時候會自定義比較函數:
//我們按對組的第一個元素大小對對組進行排序
bool cmp(pair<int, char> a, pair<int, char> b)
{
return (a.first>b.first);//>表示從大到小,<表示從小到大(注意這裏return 0是不移動元素,return 1是移動元素,
//也就是說a.first==b.first時return 0不改變原來的順序,vs中相等情況必須返回0)
}
int main()
{
vector<pair<int, char>>v;
v.push_back(make_pair(1, 'a'));
v.push_back(make_pair(1, 'b'));
v.push_back(make_pair(2, 'a'));
v.push_back(make_pair(3, 'a'));
stable_sort(v.begin(),v.end(),cmp);
for (auto x : v)
{
cout << x.first << " " << x.second<<endl;
}
}
輸出爲: