nth_element
-
声明
template< class RandomIt, class Compare > void nth_element( RandomIt first, RandomIt nth, RandomIt last,Compare comp );
-
功能
- 属于排序算法的一部分
- 相当于快排只执行一次迭代:将指定范围[first, last)内的元素, 以nth元素为中心,根据传入参数comp指定的排序规则(默认是升序),分别放在nth元素的两边。
-
参数
- first, last: 迭代器类型,指定范围
- nth:迭代器类型,指定分割中心
- comp:比较函数对象
-
返回值
- 无
-
代码示例
#include<iostream> #include<algorithm> #include<vector> using namespace std; ostream& operator<<(ostream &out, const vector<int> &v) { for (auto i : v) { out << i << " "; } return out; } int main() { int n, m; cin >> n; vector<int> v; for (int i = 0, a; i < n; i++) { v.push_back(rand() % 100); } cout << "raw: " << v << endl; cin >> m; nth_element(v.begin(), v.begin() + m, v.end()); cout << "ascending: " << v << endl; cin >> m; nth_element(v.begin(), v.begin() + m, v.end(), greater<int>()); cout << "descending: " << v << endl; return 0; }
-
执行示例
wobu@aliyun homework % ./a.out 20 raw: 83 86 77 15 93 35 86 92 49 21 62 27 90 59 63 26 40 26 72 36 2 ascending: 15 21 26 26 27 35 62 59 49 40 36 83 90 92 63 86 93 77 72 86 2 descending: 92 93 90 86 86 77 62 59 49 40 63 83 72 36 15 35 27 26 26 21