Array 隨機排序(洗牌算法)

原生Sort

function foo(arr){
    let clonrArr = arr.concat();
    clonrArr = clonrArr.sort(function(){
        return Math.random() - .5;
    })
    return clonrArr;
}

洗牌算法:

// 交換了隨機的位置,效率上是這幾種算法中最快的一個
function foo(arr){ let clonrArr = arr.concat(), len = clonrArr.length, index = null; for(let i= 0; i < len; i++){ index = Math.floor( Math.random() * clonrArr.length ); [clonrArr[index], clonrArr[i]] = [clonrArr[i], clonrArr[index]]; } // 返回結果 return clonrArr; }


迭代算法

function foo(arr){
    let  clonrArr = arr.concat(), 
          len = clonrArr.length,
          index = null,
          result = [];
    for(let i= 0; i < len; i++){
        //得到隨機的數組索引
        index = Math.floor( Math.random() * clonrArr.length );
        // result.push(clonrArr.splice(index,1)[0]);
        result = result.concat(clonrArr.splice(index,1));
    }
    // 返回結果
    return result;
}

遞歸

function foo(arr){
    let clonrArr = arr.concat(), 
         result = [],
         index = null;
    function fn(){
        // 遞歸結束條件
        if(!clonrArr.length) return;
        //得到隨機的數組索引
        index = Math.floor( Math.random() * clonrArr.length );
        // result.push(clonrArr.splice(index,1)[0]);
        result = result.concat(clonrArr.splice(index,1));
        // 遞歸調用
        fn(); 
    }
    // 調用函數
    fn();
    // 返回結果
    return result;
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章