#include
"
stdio.h
"
#define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c))
void perm( int *list, int i, int n);
int main()
{
int arry[ 4 ]={ 1 , 2 , 3 , 4 };
perm(arry, 0 , 3 );
return 0 ;
}
void perm( int *list, int i, int n)
{
int j,temp;
if (i==n)
{
for (j= 0 ;j<=n;j++){
printf( " %d " ,list[j]);
}
printf( " \n " );
}
else
{
for (j=i;j<=n;j++){
SWAP(list[i],list[j],temp);
perm(list,i+ 1 ,n);
SWAP(list[i],list[j],temp);
}
}
#define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c))
void perm( int *list, int i, int n);
int main()
{
int arry[ 4 ]={ 1 , 2 , 3 , 4 };
perm(arry, 0 , 3 );
return 0 ;
}
void perm( int *list, int i, int n)
{
int j,temp;
if (i==n)
{
for (j= 0 ;j<=n;j++){
printf( " %d " ,list[j]);
}
printf( " \n " );
}
else
{
for (j=i;j<=n;j++){
SWAP(list[i],list[j],temp);
perm(list,i+ 1 ,n);
SWAP(list[i],list[j],temp);
}
}
}
上段代码大致意思为:1,2 ,3 ,4 ,位4个大循环 每个1 2 3 4在分别递归循环,当满足要求 即 j = 3;这时打印出 排列字符串。