#include<stdio.h>
#include<stdlib.h>
#define M 10
//s存放n个字符
//out 存放要输出的序列
//b为out已排列数量
void ASort(char s[],char out[],int b){
if(s[1]== '\0'){//只剩一个字符时打印结果
out[b] = s[0];
out[b+1] = '\0';
puts(out);
}
else{
int i,j,k;
char s1[M];
for(i=0;s[i]!='\0';i++){//遍历s
out[b] = s[i];
k=0;
for(j=0;s[j]!='\0';j++){//这里遍历存储去掉第i个字符的s于s1数组中
if(i==j) continue;
s1[k++] = s[j];
}
s1[k] = '\0';//最后打上结束符
ASort(s1,out,b+1);//继续递归去掉已保存在out中输的字符,同时b+1
}
}
}
void main()
{
char s[] = "abced";
char out[M];
ASort(s,out,0);
}
输出为
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba