stable_sort稳定排序
stable_sort稳定的排序
sort 与 stable_sort 区别:
stable_sort(另外还有stable_partition)可保证相等元素的原本相对次序在排序后保持不变。或许你会问,既然相等,你还管他相对位置呢,也分不清楚谁是谁了?这里需要弄清楚一个问题,这里的相等,是指你提供的函数表示两个元素相等,并不一定是一模一样的元素。
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(string a, string b)
{
return a.length() < b.length();
}
int main()
{
string s[5];
s[0] = "fireworks";
s[1] = "algorithm";
s[2] = "iostreamm";
s[3] = "stringcpy";
s[4] = "111111111";
stable_sort(s, s + 5, cmp);
for(int i = 0; i < 5; ++i)
cout << s[i] << '\n';
///结果
///fireworks
///algorithm
///iostreamm
///stringcpy
///111111111
cout << '\n';
sort(s, s + 5);
for(int i = 0; i < 5; ++i)
cout << s[i] << '\n';
///结果
///111111111
///algorithm
///fireworks
///iostreamm
///stringcpy
return 0;
}
五个string在长度(length)方面相等,在stable_sort后相对位置没变,在sort后位置变了,就酱……