#include<iostream> #include<algorithm> using namespace std; int main() { int a[9]={1,8,6,3,5,9,2,3,-7}; for(int i=0;i<=8;i++) cout<<a[i]<<' ';cout<<endl; nth_element(a,a+4,a+9); for(int i=0;i<=8;i++) cout<<a[i]<<' ';cout<<endl; cout<<"The 4th element is "<<a[4]<<endl; return 0; }
运行结果:
- 通过调用nth_element(start, start+n, end) 可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),
- 并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,
- 但不能保证他们是有序的
- 要注意的是,此函数只是将第nth大的元素排好了位置,但并没有返回值。
- 所以要知道第nth大的元素 还应进行输出
- 程序实现:
- next_permutation() 与 prev_permutation()
- bool next_permutation( iterator start, iterator end); 返回值为布尔型,对字符串进行修改,注意左闭右开。
- next_permutation()函数功能是得到所有比当前排列大的第一个(最小的)排列。包含在algorithm库中。
-
prev_permutation()函数功能是得到所有比当前排列小的第一个(最大的)排列。包含在STL里。
-
可处理负数
注意重复元素的情况
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string str,s;
cin >> str; s=str;
//从小到大 输出所有比当前排列大的排列
while(next_permutation(str.begin(),str.end()))
cout << str << endl;
puts("————————————————");
//从大到小输出所有比当前排列小的排列
while(prev_permutation(s.begin(),s.end()))
cout << s << endl;
return 0;
}
很好的遍历函数!
random_shuflle (最小圆覆盖里会用到的一个神奇的东西)