- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- </head>
- <body>
- <script type="text/javascript">
- /* 全排列(递归交换)算法
- 1、将第一个位置分别放置各个不同的元素;
- 2、对剩余的位置进行全排列(递归);
- 3、递归出口为只对一个元素进行全排列。
- */
- function swap(arr, i, j) {
- if (i != j) {
- var temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- var count = 0;
- function show(arr) {
- document.write("P<sub>" + ++count + "</sub>: " + arr + "<br />");
- }
- function perm(arr) {
- (function fn(n) {
- //为第n个位置选择元素
- for (var i = n; i < arr.length; i++) {
- swap(arr, i, n);
- if (n + 1 < arr.length - 1)
- //判断数组中剩余的待全排列的元素是否大于1个
- fn(n + 1); //从第n+1个下标进行全排列
- else show(arr); //显示一组结果
- swap(arr, i, n);
- }
- })(0);
- }
- perm(["e1", "e2", "e3", "e4"]);
- </script>
- </body>
- </html>
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/828346