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

练习题的题目是:【对['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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值