关于输入一组数并输出所有全排列思考~

最近刚学C语言,以前没接触过编程这东西,算是个编程中菜鸟中的菜鸟吧,不经意想到用程序来解决“全排列”问题,思考许久,先想出了一种算法,如下:
【关于输入一组数并输出所有全排列思考~】#include
#include
#define NUM 4
void anagram(int[],int);
void print(int[]);
void main()
{
int d[NUM];
int i;
for(i=0; id[i]=i + 1;
/*printf("初始化后的数组顺序是:");
print(d); */
anagram(d,NUM);
system("pause");
}
void anagram(int d[],int n)
{
int i,j,temp;
if(n==1)
{
print(d);
return;
}
for(i=0; i{
/*printf("/ni = %d,n = %d, 准备调用aragram(d,%d)/n",i,n,n-1);
printf("这时候的数组顺序是:");
print(d); */
anagram(d,n-1);
temp=d[0];
for(j=1; j<=n-1; j++)
{
d[j-1]=d[j];
}
d[n-1]=temp;
}
}
void print(int d[])
{
int i;
for(i=0; i{
printf("%d",d[i]);
}
printf("/n");
}
这个程序刚写出来时以为很满意,可是我一分析它的时间复杂度吓我一跳,达到了O(n^n),这显然不好。这是我第一次写技术博客,由此开始我的学习之路,我决定再想想有没有更好的方法,希望大家有好的方法也可以告诉我,小弟我只是个初学者,希望能和各位CSDN的朋友交流不断提高自己~~

    推荐阅读