/** 传入一个数组参数(数组里面的数字互不相同),返回数组数字全排列的所有情况的数组
*思路:从数组的数字里面选一个,放在第一项,剩下的数字递归全排
*没考虑去重的问题
*
**/
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" ]);