#include <iostream>
#include <cmath>
using namespace std;
void MyPermutition(char * a,int length,int index)
{
if(index == length -1)
{
for(int i = 0;i < length;++i)
cout<<a[i];
cout<<endl;
return;
}
else
{
for(int i = index; i < length ;++i)
{
swap(a[i],a[index]);
MyPermutition (a,length,index+1);
swap(a[i],a[index]);
}
}
}
void MyReverse(char *a,int start,int length)
{
for(int i = start,j = length -1; i < j;++i,--j)
{
swap(a[i],a[j]);
}
}
bool ZiDianXuNext(char *a,int length)
{
int i = 0;//满足 p[j-1] < p[j] j的最大值
int h = 0; //满足 p[i-1] < p[k] k的最大值
for(int t = 1;t < length;++t)
{
if(a[t - 1] < a[t]) i = t;
}
if(i == 0)return false;//没找到满足 p[j-1] < p[j] 的情况 说明已经到头了
for(int t = 0 ;t < length ;++t)
{
if(a[t] > a[i-1])h = t;// 满足 p[i-1] < p[k] k的最大值
}
swap(a[i-1],a[h]);
MyReverse(a,i,length); //逆序后面的元素
for(int t = 0 ; t< length;++t)
{
cout<<a[t];
}
cout<<endl;
return true;
}
int main()
{
char a[4] = {'1','2','3','4'};
while (ZiDianXuNext(a,4));
getchar();
return 0;
}
字符串的排列
最新推荐文章于 2023-05-10 17:27:18 发布