<algorithm>
头文件中,因此在使用该函数前,程序也应包含如下语句:
#include <algorithm>并且,table_sort() 函数的用法也有 2 种,其语法格式和 sort() 函数完全相同(仅函数名不同):
//对 [first, last) 区域内的元素做默认的升序排序 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last ); //按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序 void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );其中,first 和 last 都为随机访问迭代器,它们的组合 [first, last) 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater<T>),也可以是自定义的排序规则。
#include <iostream> // std::cout #include <algorithm> // std::stable_sort #include <vector> // std::vector //以普通函数的方式实现自定义排序规则 bool mycomp(int i, int j) { return (i < j); } //以函数对象的方式实现自定义排序规则 class mycomp2 { public: bool operator() (int i, int j) { return (i < j); } }; int main() { std::vector<int> myvector{ 32, 71, 12, 45, 26, 80, 53, 33 }; //调用第一种语法格式,对 32、71、12、45 进行排序 std::stable_sort(myvector.begin(), myvector.begin() + 4); //(12 32 45 71) 26 80 53 33 //调用第二种语法格式,利用STL标准库提供的其它比较规则(比如 greater<T>)进行排序 std::stable_sort(myvector.begin(), myvector.begin() + 4, std::greater<int>()); //(71 45 32 12) 26 80 53 33 //调用第二种语法格式,通过自定义比较规则进行排序,这里也可以换成 mycomp2() std::stable_sort(myvector.begin(), myvector.end(), mycomp);//12 26 32 33 45 53 71 80 //输出 myvector 容器中的元素 for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) { std::cout << *it << ' '; } return 0; }程序执行结果为:
12 26 32 33 45 53 71 80
那么,stable_sort() 函数的效率怎么样呢?当可用空间足够的情况下,该函数的时间复杂度可达到O(N*log2(N))
;反之,时间复杂度为O(N*log2(N)2)
,其中 N 为指定区域 [first, last) 中 last 和 first 的距离。
本文链接:http://task.lmcjl.com/news/19077.html