STL中的next_permutation的实现原理
从右到左扫描找到第一个Ai<Ai+1
交换Ai,Ai+1,然后排序Ai+1到An
#include <iostream>
#include <algorithm>
using namespace std;
string Next_Permutation(string str)
{
string strb;
int i;
bool ok=false;
strb=str;
int len=str.length();
for(i=len-2;i>=0;i--)
{
if(str[i]<str[i+1]){ok=true;break;}
}
if(!ok) return strb;
swap(strb[i],strb[i+1]);
sort(&strb[i+1],&strb[strb.length()-1]);
return strb;
}
int main()
{
cout<<Next_Permutation(string("321"));
return 0;
}