JS练习题②:数组的全排序
2015-12-04 18:11
615 查看
练习题的题目是:【对['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
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
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式