Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249952
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 961
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-11 17:19
个人简介

没有最好的语言,只有最适合的语言。

文章分类

全部博文(34)

文章存档

2016年(2)

2013年(32)

我的朋友

分类: Python/Ruby

2013-07-22 14:03:57

一个数组的全排列,就是罗列出数组所有的排列可能,比如,1,2,3
有:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
所有的可能是n!
分析发现:
一个N个数的全排列{1,2,3,.....,n}的全排列perm(n)=r1perm(r2,..,rn),r2perm(r1,r3,...,rn),...rnperm(r1,r2,r3,...,r(n-1))
所以我们可以把要排列的开始的位置和N-1的其他的数做一次交换,这样就是做N-1的全排列,这样一直递归下去,就可以完全求出

用C语言实现的代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int n=0;

  3. void swap(int *a ,int *b)
  4. {
  5.     int temp;
  6.     temp = *a;
  7.     *a = *b;
  8.     *b = temp;
  9. }

  10. void perm(int list[] , int begin , int end)
  11. {
  12.     int i;
  13.     if(begin>end)
  14.     {
  15.         for(i = 0 ; i <=end ; i++)
  16.         {
  17.             printf("%d ",list[i]);
  18.         }
  19.         printf("\n");
  20.         n++;
  21.     }
  22.     else
  23.     {
  24.         for(i = begin ; i<=end; i++)
  25.         {
  26.             swap(&list[begin],&list[i]);
  27.             perm(list,begin+1,end);
  28.             swap(&list[begin],&list[i]);
  29.         }
  30.     }
  31. }

  32. int main()
  33. {
  34.     int list[]={1,2,3,4,5};
  35.     perm(list,0,4);
  36.     printf("total:%d\n",n);
  37.     return 0;
  38. }
用Python实现的代码如下:

点击(此处)折叠或打开

  1. '''
  2. Created on 2013年7月22日
  3. 对一个数组进行全排列输出
  4. @author: lin
  5. '''
  6. COUNT=0


  7. def perm(num_list,begin,end):
  8.     global COUNT
  9.     if begin>=end:
  10.         print("enter")
  11.         for num in num_list:
  12.             print(num),
  13.         COUNT +=1
  14.     else:
  15.         i = begin
  16.         for num in range(begin,end):
  17.             num_list[num],num_list[i]=num_list[i],num_list[num] #两个数进行交换
  18.             perm(num_list,begin+1,end)
  19.             num_list[num],num_list[i]=num_list[i],num_list[num]
  20. num_list=["1","2","3","4","5"]
  21. perm(num_list,0,5)
  22. print("Total: %s" % COUNT)
  23. exit

python的数组交换还是比较好的 不用那么麻烦

阅读(5098) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~