C语言实现全排列

实现全排列,递归实现

 1 #include <stdio.h>

 2 #include <stdlib.h>

 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(void)

33 {

34     int list[]={1,2,3,4,5,6,7};

35     perm(list,0,6);

36     printf("total:%d\n",n);

37     system("pause");

38     return 0;

39 }                  

求字典顺序的下一个全排列

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 void swap(int *a, int *b)

 4 {

 5      int m;

 6      m=*a;

 7      *a=*b;

 8      *b=m;

 9 }

10 void perm(int list[], int len)

11 {

12      int i=0;

13      int k=0;

14      int n=len;

15      int j=1;

16      for(;j<=len;j++)

17      {

18                      if(list[j-1]<list[j])

19                                           i=j;

20      }

21      for(j=1;j<=len;j++)

22      {

23                         if(list[i-1]<list[j])

24                                              k=j;

25      }

26      swap(&list[i-1],&list[k]);

27      for(j=0;j<=i;j++)

28      {

29                       printf("%d ",list[j]);

30      }

31      for(j=len;j>i;j--)

32      {

33                        printf("%d ",list[j]);

34      }

35 }

36 int main(void)

37 {

38     int list[]={7,6,4,1,3,5,2};

39     perm(list,6);

40     system("pause");

41     return 0;

42 }                  

 

你可能感兴趣的:(C语言)