全排列所有情况输出

459 阅读1分钟

题目:有一个数组,每个元素都不重复,设计一个算法,对它进行全排列,并且要打印所有的情况

js递归解法:

/*
    arr 需要进行全排列的数组
    p   数组起始位置
    q   数组结束位置
*/
function prem(arr,p,q){
    if(p===q){              // 递归结束条件
        console.log(arr)
    }else{
        for(let i=p;i<=q;i++){
            swap(arr,p,i)   // 表示每一个元素都有机会排在前面
            prem(arr,p+1,q) // 表示对剩下的元素都进行一次全排列
            swap(arr,p,i)   // 一次全排列完成后,需要再次调换过来
        }
    }
}

function swap(arr,i,j){
    let tmp = arr[i]
    arr[i] = arr[j]
    arr[j] = tmp
}

prem([1,2,3,4,5],0,4)