如题:
如果有数组a[3] = {1,2,3};要按照排列组合的方式进行排列,输入格式如下:
1,2,3 1,3,2 2,1,3 2,3,1 3,1,2, 3,2,1
用递归的方法进行编码:
代码如下:
1 #include2 3 int n = 0; 4 5 void swap(int *a, int *b) //用于交换数据 6 { 7 int m; 8 m = *a; 9 *a = *b; 10 *b = m; 11 } 12 void perm(int list[], int k, int m) 13 { 14 int i; 15 if(k > m) 16 { 17 for(i = 0; i <= m; i++) 18 printf("%d ", list[i]); 19 printf("\n"); 20 n++; 21 } 22 else 23 { 24 for(i = k; i <= m; i++) //每个数字都要和第一个交换25 { 26 swap(&list[k], &list[i]); //先交换数据 27 perm(list, k + 1, m); 28 swap(&list[k], &list[i]); //在恢复先前的数据29 } 30 } 31 } 32 int main() 33 { 34 int list[] = { 1, 2, 3}; 35 perm(list, 0, 2); 36 printf("total:%d\n", n); 37 return 0; 38 }