js排列组合的性能问题

此段代码为一个求数组所有排列组合的方法,当数组元素个数大于7时,运行效率及底,有什么更好的方法改进他的算法,愿请达人帮助


<SCRIPT LANGUAGE="JavaScript">

<!--
/**
* 克隆数组
*/
Array.prototype.clone = function () {
return this.concat();
};

/**
* 按指定的顺序数组重新排列
*/
Array.prototype.reOrder = function ( aOrder ) {
var aClone = this.clone();
for (var i=0; i < aOrder.length; i++) {
this[aOrder[i]] = aClone[i];
}
return this;
};

/**
* 取得 0 到 iLen 的所有排列顺序
*/
function getOrders( iLen ) {
var aResult = [];
var aNum = [];
var aNumFlag = [];
var i, j;
for(i = 0; i < iLen; i++) {
aNum[i] = i,
aNumFlag[i] = 1;
}

for(;;){
aResult.push(aNum.clone());
aNumFlag[aNum[iLen-1]] = 0;
for(i = iLen - 2; i>=0; i--){
aNumFlag[aNum[i]] = 0;
if(aNum[i] < aNum[i+1]) {
break;
}
}
if( i < 0) {
break;
}

for(j = aNum[i] + 1; j < iLen; j++){
if(!aNumFlag[j]) {
break;
}
}

aNumFlag[j] = 1;
aNum[i] = j;
for(j=0, i++; i < iLen; j++) {
if(!aNumFlag[j]) {
aNum[i++] = j;
aNumFlag[j] = 1;
}
}
}
return aResult;
}

/**
* 生成数组的全排列
* 方法: 先生成数组长度以下的所有顺序, 然后根据顺序数组重排原数组
*/
function arrayInAllOrder( aData ) {
var aResult = [];
var aOrders = getOrders(aData.length);
var aOrder = aOrders.shift();
while(aOrder) {
aResult.push(aData.clone().reOrder(aOrder));
aOrder = aOrders.shift();
}
return aResult;
}


var others=new Array();
others[0]=0;
others[1]=1;
others[2]=2;
others[3]=3;
others[4]=4;
others[5]=5;
others[6]=6;
others[7]=7;
// others[8]=8;
// others[9]=9;
var result=arrayInAllOrder(others);
alert(result.length);



//-->
</SCRIPT>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值