C语言实现全排列

来源:互联网 发布:linux telnet ip 端口 编辑:程序博客网 时间:2024/05/18 09:37

全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个;为了用递归的方式实现全排列,我们将整组数中的所有的数分别与第一个数交换,然后总是处理后n-1个数的全排列。

#include <stdio.h>int count = 0;void swap(int *a, int *b){     int tmp = 0;     tmp = *a;     *a = *b;     *b = tmp;}/*content : permulation arrayswap_idx : need swap idxsize : the content size*/void perm(int content[], int swap_idx, int size){     int i = 0;     if(swap_idx >= size)     {          for(i = 0; i < size; i++)          {               printf("%d\t",content[i]);          }          count ++;          printf("\n");     }     else     {          for(i = swap_idx; i < size; i++)          {               swap(&content[swap_idx], &content[i]);               perm(content, swap_idx+1, size);               swap(&content[swap_idx], &content[i]);          }     }}int main(){     int content[] = {1,3,4,5,6};     perm(content, 0, 5);     printf("\n==== total %d ====\n\n", count);     return 0;}

 

0 0