这些算法都需要随机存取迭代器的支持,所以不支持list。
pred 参数:
默认排序准则为 operator <,用 pred(x,y)代替 x<y。
1. nth_element
template<class RanIt>
void nth_element(RanIt first, RanIt nth, RanIt last);
template<class RanIt, class Pr>
void nth_element(RanIt first, RanIt nth, RanIt last,
Pr pred);
排序后,nth之前的元素不比nth所指元素大,nth之后的元素不比nth所指元素小。
测试例程(其他函数测试程序类似):
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
void print(int i){cout << i << "\t";}
int main(){
vector<int> vi;
for (int i = 0; i < 10; i ++)
vi.push_back(rand()%100);
for_each (vi.begin(), vi.end(), print);
cout << endl << endl;
nth_element(vi.begin(), vi.begin()+5, vi.end()); //测试语句
for_each (vi.begin(), vi.end(), print);
cout << endl;
return 0;
}
2. sort
template<class RanIt>
void sort(RanIt first, RanIt last);
template<class RanIt, class Pr>
void sort(RanIt first, RanIt last, Pr pred);
采用quick sort 算法
template<class RanIt>
void partial_sort(RanIt first, RanIt mid,
RanIt last);
template<class RanIt, class Pr>
void partial_sort(RanIt first, RanIt mid,
RanIt last, Pr pred);
采用 heap sort 算法
排序完 [firtst, mid) 区间内的元素
4. stable_sort
template<class BidIt>
void stable_sort(BidIt first, BidIt last);
template<class BidIt, class Pr>
void stable_sort(BidIt first, BidIt last, Pr pred);
采用 merge sort,保持相等的元素之间的相对次序。
n*log(n)*log(n) 时间复杂度
对所有元素进行排序
5. partition
template<class BidIt, class Pr>
BidIt partition(BidIt first, BidIt last, Pr pred);
返回BitIt类型指针(命名为pIt),[pIt, last)不满足pred。
pre:设置为bind2nd(less<int>(), 50),结果如下:
6. stable_partition
保证 [first, pIt) 和 [pIt, last) 两区间内元素的相对次序保持不变