JS练习题②:数组的全排序

来源:互联网 发布:linux创建多个文件 编辑:程序博客网 时间:2024/06/05 16:27

练习题的题目是:【对['a','b','c']进行全排序】

1、方法1:

/*      全排列(递归交换)算法的实现思路      1、将第一个位置分别放置各个不同的元素;      2、对剩余的位置进行全排列(递归);      3、递归出口为只对一个元素进行全排列。  */ function funOne(text){      (function fn(n){    //为第n个位置选择元素          for(var i=n; i<text.length; i++){              swapChar(text, i, n);              //判断数组中剩余的待全排列的元素是否大于1个              if(n+1 < text.length-1){             fn(n+1); //从第n+1个下标进行全排列              }else{            showResult(text); //显示一组结果              }            swapChar(text,i,n);          }      })(0);  };// 交换function swapChar(text, i, j){if(i != j){var temp = text[i];          text[i] = text[j];          text[j] = temp;      }  };// 显示var count = 0;  function showResult(text){console.log("Line "+ (++count) +": "+ text);  };
在控制台中执行方法,funOne(["a","b","c"])

输出的结果为::

2、方法2:

function funTwo(test){for(var i=test.length; i--;){for(var j=test.length; j--;){for (var k=test.length; k--;){if(test[i]!==test[j] && test[j]!==test[k] && test[i]!==test[k]){console.log(test[i] + test[j] + test[k]);}        }}}};
输出结果就是abc的全排序。

这里是已知test.length = 3

0 0