学习日记四:全排列(不含重复数)
忽然想起以前在书上看到的全排列问题,当时只看了方法,不知道怎么写代码,今天试写,练习递归
1,2,3,4全排列
step1:将2,3,4与1分别交换,并作后三位的全排列(后三位的全排列方法与4位相同)
step2:将3,4分别与2交换,并作后两位的全排列
。。。。
一直这样做直到遇到后面没有数据的4。即将每一项与第一项交换,并作第一项以外的全排列,当然这里的第一项是动态的
定义函数allarray(j,k,a[])功能:对数组a[]进行从j到k的全排列。
程序代码:#include <stdio.h>
void swap( int j , int k , int a[] )
{
int temp;
temp=a[j] ;
a[j]=a[k] ;
a[k]=temp ;
}
void AllArray( int j , int k , int a[] )
{
int i ;
if(j==k)
{
for(i=0 ; i<=k ; i++)
printf( "%d",a[i] );
printf("\n");
}
else
{
for(i=j ; i<=k ; i++)
{
swap( i , j , a ) ;
AllArray( j+1 , k , a ) ;
swap( i , j , a ) ;
}
}
}
void main()
{
int a[10]={0} ;
int N ;
int i ;
scanf( "%d",&N );
for(i=0 ; i<N ;i++)
scanf( "%d",&a[i] );
AllArray(0,N-1,a) ;
}






