/** 传入一个数组参数(数组里面的数字互不相同),返回数组数字全排列的所有情况的数组
*思路:从数组的数字里面选一个,放在第一项,剩下的数字递归全排
*没考虑去重的问题
*
**/
function fullSort(arr){
var result = [];
if (arr.length == 1) {
result.push(arr);
return result;
}
for (var i = 0; i < arr.length; i++) {
var temp = [];
temp.push(arr[i]); //取任意一项放到temp的第一项
var remain = arr.slice(0);//深复制原数组到remain
remain.splice(i,1); //去掉那一项
var temp2 = fullSort(remain).concat(); //剩下的项全排列,返回[[1,2],[1,3]]这样的数据
for (var j = 0; j < temp2.length; j++) {
temp2[j].unshift(temp[0]); // [[5,1,2],[5,1,3]]这样的数据
result.push(temp2[j]);
}
}
return result;
}
for (var i = 0, arr = fullSort([1,2,2,3,5]); i < arr.length; i++) {
console.log(arr[i]);
}
别人的代码= =
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) {
for(var i=n;i<arr.length;i++) {
swap(arr,i,n);
if(n+1<arr.length-1)
fn(n+1);
else
show(arr);
swap(arr,i,n);
}
})(0);
}
perm(["e1","e2","e3"]);