有没有办法对数据数组执行局部排序,以便对最后n个元素进行排序?好吧我的意思是使用标准库,而不是实现我自己的排序功能(这就是我现在正在做的事情).
示例输出(使用较少的比较器):
示例输出(使用较少的比较器):
2 1 4 || 5 6 8 10
||之后的元素都比||之前的元素大于元素,但只包含||右边的元素(更接近数组末尾的索引)保证排序.
这基本上是std :: partial_sort函数的反转,它对左(第一)元素进行排序.
解决方法
将std :: partial_sort与反向迭代器一起使用.
例如:
int x[20]; std::iota(std::begin(x),std::end(x),0); std::random_shuffle(std::begin(x),std::end(x)); std::reverse_iterator<int*> b(std::end(x)),e(std::begin(x)); std::partial_sort(b,b+10,e,std::greater<int>()); for (auto i : x) std::cout << i << ' ';