| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7166 人关注过本帖
标题:【分享】三种“聪明”的全排列函数
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用pangding在2010-12-6 22:01:53的发言:

楼主如果想讲算法的话,用语言描述其实更好一点。算法描述清楚了代码就不用注释太多了。
比如第一个,你只说了函数是干什么的,没说怎么干的,后面的代码也没有有用的注释。和这个同样功能的函数,STL 里就有一个,那个我倒会,不过你的算法没细看不知道用的算法一样不一样。另两个感觉很专用,我就不怎么看了。

我听说过一个生成全排列的算法,是递归的,不知道你这有没有。我只说下思路。
一个元素的排列只有一种:
1
两个的,就是把 2 在 1 前后“晃”一下:
   1 2
2 1
三个的,要借助两个的,把 3 在其中“穿梭”一下,一共6个:
   1    2 3
   1 3 2
3 1    2
3 2    1
   2 3 1
   2    1 3
四个的,就是在其中再“穿梭”,一共24个:
   1    2    3 4
   1    2 4 3
   1 4 2    3
4 1    2    3
4 1    3    2
   1 4 3    2
   1    3 4 2
   1    3    2 4
   3    1    2 4
   3    1 4 2
   3 4 1    2
4 3    1    2
4 3    2    1
   3 4 2    1
   3    2 4 1
   3    2    1 4
   2    3    1 4
   2    3 4 1
   2 4 3    1
4 2    3    1
4 2    1    3
   2 4 1    3
   2    1 4 3
   2    1    3 4
五个的可以再算。
这个算法的特点是,只要知道了 n - 1 的全排列,就可以用之来生成 n 个的。

另一个比较著名的算法就是我说的 STL 里的那个,那个的特点是按字典序移动出全排列。
好算法啊,

我就是真命天子,顺我者生,逆我者死!
2011-01-05 18:02
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
用递归是可以,不过分析起来很麻烦,只能少用为好

小代码,大智慧
2011-01-05 18:09
快速回复:【分享】三种“聪明”的全排列函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044765 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved