#include <stdio.h>
#include <stdlib.h>
void swap(char * x,char * y)
{
char tmp=*x;
*x=*y;
*y=tmp;
}
//递归算法
void permutation(char *s,int b,int e)
{
if(b==e)
{
printf("%s\n",s);
}
int i;
for(i=b;i<=e;i++)
{
swap(&s[b],&s[i]);
permutation(s,b+1,e);
swap(&s[b],&s[i]);
}
}
void reverse(char *str,int i,int j)
{
while(i<j)
{
swap(&str[i],&str[j]);
i++;
j--;
}
}
int get_next(char *s,int l)
{
if(l==0||l==1)
return 0;
int i=l-2;
int j=l-1;
for(;i>=0;i--)
{
int e=j;
if(s[i]<s[i+1])
{
while(s[i]>=s[e])
e--;
swap(&s[i],&s[e]);
reverse(s,i+1,j);
return 1;
}
}
return 0;
}
//非递归算法
void permutation2(char *s,int l)
{
do
{
printf("%s\n",s,l);
} while(get_next(s,l));
}
int main()
{
char str[16]="abcde";
//permutation(str,0,strlen(str)-1);
permutation2(str,strlen(str));
return 0;
}