c++ sort與stable_sort的區別與自定義排序的使用

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;
	}
	
}

輸出爲:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章