sort(beg,end)
sort(beg,end,op)
stable(beg,end,)
stable(beg,end,op)
1.sort()与stable_sort()的上述第一形式,使用operator<对区间[beg,end)内的所有元素进行排序。
2.sort()与stable_sort()的上述第二形式,使用二元判断式op(elem1,elem2)作为排序准则,对区间[beg,end)内的所有元素进行排序。
3.sort()和stable_sort()的区别是,后者保证相等元素的原本相对次序在排序后保持不变。即stable_sort()是稳定排序。所谓稳定排序,是指对一个序列进行排序之后,如果两个元素的值相等,则原来乱序时在前面的元素现在(排好序之后)仍然排在前面。sort()没有这个承诺,而stable_sort()承诺了这一点。
4.不可以对list调用这些算法,因为list不支持随机存取迭代器,不过对于list,其自身带有成员函数,可以完成sort(),对其自身元素排序。
5.sort()的平均排序效能是nlogn,如果想避免可能出现的差情况,应该使用partial_sort()。
6.sort()内部使用快速排序,stable_sort()使用归并排序。
代码示例:
#include"fuzhu.h" using namespace std; int main() { deque<int> coll; INSERT_ELEMENTS(coll,1,9); INSERT_ELEMENTS(coll,1,9); PRINT_ELEMENTS(coll,"on entry: "); sort(coll.begin(),coll.end()); // [beg,end) 默认less < PRINT_ELEMENTS(coll,"sorted: "); sort(coll.begin(),coll.end(),greater<int>()); //[beg,end) greater > PRINT_ELEMENTS(coll,"sorted >: "); system("pause"); return 0; }
#include"fuzhu.h" using namespace std; struct Node { int value; int index; }; bool mycmp(const Node& a,const Node& b) { return a.value<b.value; } int main() { vector<Node> coll; vector<Node>::iterator pos; Node node; int va; for(int i=0;i<=8;i++) { cin>>va; node.value=va; node.index=i; coll.push_back(node); } stable_sort(coll.begin(),coll.end(),mycmp); //sort(coll.begin(),coll.end(),mycmp); cout<<"stable_sort: "<<endl; for(pos=coll.begin();pos!=coll.end();++pos) { cout<<pos->value<<" "<<pos->index<<endl; } system("pause"); return 0; }