全排列
主要思路:
1.固定最后一个值
2.把剩下的m-1个数再进行全排列
3.恢复原样,不影响下一种情况
void showArr(int arr[],int n){
int i;
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
void swap(int *pa,int *pb){
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
//数组总共n个数据 m个数需要进行全排列
void showAll(int arr[],int n,int m){
if(m==1){
showArr(arr,n);
}else{
int i;
for(i=m-1;i>=0;i--){
swap(&arr[i],&arr[m-1]);//固定最后一个值
showAll(arr,n,m-1);//把剩下的m-1个数再进行全排列
swap(&arr[i],&arr[m-1]);//恢复原样,不影响下一种情况
}
}
}
//对n个数进行全排列
void pailie(int arr[],int n){
// (1 2 3全排列) 4
// (1 2 4全排列) 3
// (1 3 4全排列) 2
// (2 3 4全排列) 1
showAll(arr,n,n);
}