#include
#include
#include
#include
#include
#include
#include
using namespace std;
int rand_int()
{
return rand()%100;
}
void print(vector &v,const char* s)
{
cout<(cout," "));
cout<b)
return true;
return false;
}
class compare{
public:
bool operator()(const int &a,const int &b)
{
if(a v;
generate_n(back_inserter(v),10,rand_int);
print(v,"产生10个随机数");
partial_sort(v.begin(),v.begin()+4,v.end());
print(v,"局部递增排序");
partial_sort(v.begin(),v.begin()+4,v.end(),cmp);
print(v,"局部递减排序");
partial_sort(v.begin(),v.begin()+4,v.end(),compare());
print(v,"局部递增排序");
return 0;
}
通过程序可以看到两次局部递增排序并不相同,因为partial_port不是稳定排序算法。在只需要最大或最小的几个值时,partial_port比其他排序算法快。
partial_sort
接受三个参数,分别是区间的头,中间和结尾。执行后,将前面M(M=中间-头)个元素有序地放在前面,后面的元素肯定是比前面的大,但他
们内部的次序没有保证。有序序列不包括中间参数。
nth_element
这个函数只真正排序出一个元素来,就是第n个。函数有三个迭代器的输入(当然还可以加上一个谓词),执行完毕后,中间位置指向的元素保证和完全排序后
这个位置的元素一致,前面区间的元素都小于(精确地说,是不大于)后面区间的元素。
所以要得到最大或者最小的20个元素,调用稍有不同。
partial_sort(v.begin(),v.begin()+20,v.end());
nth_element(v.begin(),v.begin()+19,v.end());
其他排序请参看http://blog.csdn.net/xiaoniba10631/article/details/6727045