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

输出为:

发布了57 篇原创文章 · 获赞 260 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40692109/article/details/104552356