关于algorithm的一些东西
感言:
学C++不学STL函数库的人可能都是。。。
有点问题
sort,快排:
这是个初学者必需掌握的东西,及其好用,因为方(lan)便(duo)。
sort(a+1,a+1+n);是最基本的,你还可以根据这个随意改变数组名称,区间范围(只要确定你需要排序数组的开头和结尾的数组的代号)
#include<iostream> #include<algorithm> using namespace std; int n; int main() { cin>>n; int a[n+1]; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); for(int i=1;i<=n;i++) cout<<a[i]; }
next_permutation与prev_permutation,不重复的全排列:
这玩意貌似没啥人知道,因为全排列可以自己打,而且STL本来就慢,但是因为方(lan)便(duo)还是挺好用的。这里介绍一下,next_permutation是按照字典序排列的全排列而prev_permutation则是逆字典序排列的。要使用这个东西,你必须确定你需要排列数组的值的
顺序!!!
例如,你用next_permutation排列(3,1,2)会得出(3,1,2);(3,2,1);
而用next_permutation排列(1,2,3)会得出(1,2,3);(1,3,2);(2,1,3);(2,3,1);(3,1,2);(3,2,1);
所以顺序很重要!!!如果你想要得出全部答案一个范围的排序,next_permutation你就从小到大来,prev_permutation你就从大到小来,值得一提的是这玩意返回值是bool类型的,偶买噶!!!;
#include<iostream> #include<algorithm> using namespace std; int n; int main() { cin>>n; int a[n+1]; for(int i=1;i<=n;i++) cin>>a[i]; do { for(int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl; } while(next_permutation(a+1,a+n+1)); }