c 程序 输出N个数的所有排列有错 求助

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:00:56
#include <stdio.h>
#include <stdlib.h>
void printlist(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
}
void swap(int *p,int *q)
{
int t;
t=*p;*p=*q;*q=t;
}
main()
{
int n,*a,m,k,i,j;
scanf("%d",&n);
a=malloc(n*sizeof(int));
for(i=0;i<n;i++)
a[i]=i+1;
printlist(a,n);
while(1)
{
m=n-2;
while((m>=0)&&(a[m]>a[m+1]))
m--;
if(m<0) break;
k=n-1;
while(a[m]>a[k])
k--;
swap(&a[m],&a[k]);
for(i=m+1,j=n-1;i<j;i++,j--)
swap(a+i,+j);
printlist(a,n);
}
free(a);

}

N个数的全排列要用递归才能实现;
下面是我的递归程序:
/*调用函数中*a是数组,n代表共有n个数,m代表有m个数要全排列*/
void AllQueue(int *a,int n,int m)
{
int i,temp,b[5];

for(i=0;i<5;i++)
b[i]=a[i];
if(m>2)
{
for(i=n-m;i<n;i++)
{
temp=b[n-m];
b[n-m]=b[i];
b[i]=temp;
AllQueue(b,n,m-1);
}
}
else
{
/*数组b就是结果,对数组b操作即可*/
temp=b[n-m];
b[n-m]=b[n-m+1];
b[n-m+1]=temp;
/*数组b就是结果,对数组b操作即可*/
}
}