全排列-相邻交换法
整型数组
1 #include <stdio.h> 2 3 void fullArray(int depth,int array[],int lenth) 4 { 5 if(lenth<=0) return; 6 if(depth>=lenth) 7 { 8 int *p=array-depth; 9 for(int i=0;i<lenth;i++) printf("%d ",p[i]); 10 printf("\n"); 11 return ; 12 } 13 //跳出条件为超出数组长度 14 for(int *p=array;p-array+depth<lenth;p++) 15 { 16 //简单交换法 17 int temp=*p; 18 *p=*array; 19 *array=temp; 20 fullArray(depth+1,array+1,lenth); 21 *array=*p; 22 *p=temp; 23 } 24 } 25 26 int main() 27 { 28 int test[]={1,2,3,4}; 29 30 fullArray(0,test,4); 31 32 return 0; 33 }
字符型数组
1 #include <stdio.h> 2 3 void fullArray(char *array,int lenth) 4 { 5 if(lenth<=0) return; 6 7 if(!*array) 8 { 9 printf("%s\n",array-lenth); 10 11 return ; 12 } 13 for(char *p=array;*p;p++) 14 { 15 char temp=*p; 16 *p=*array; 17 *array=temp; 18 fullArray(array+1,lenth); 19 *array=*p; 20 *p=temp; 21 } 22 } 23 int main() 24 { 25 char str[]="1234"; 26 27 fullArray(str,4); 28 29 return 0; 30 }