演算法
last ← true
for j ← len–2 down to 0 do
if aj < aj+1 then do
last ← false
break for loop
end if
end for
if last then return 0
for k ← j+1 to len–1 do
if aj > ak then do
break for loop
end if
end for
swap aj ? ak-1
reverse aj+1 ? an-1
return 1
別人寫的C程式參考
int num,j=1,level=0,a[15];
char ch[15],out[15];
void tt()
{
int i;
level+=1;
for(i=0;i<num;i++){
if(a[i]==0)
{
a[i]=1;
out[level-1]=ch[i];
if(level==num)
printf("n%3d %s",j++,out);
tt();
a[i]=0;
}
level-=1;
}
void main()
{
num=0; /*number of input*/
printf("nInput characters:");
while((ch[num]=getchar())!='r')
{
a[num]=0;
num+=1;
}
ch[num]='