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;
}
 
posted @ 2022-07-28 11:44  Yuri_trender  阅读(86)  评论(0编辑  收藏  举报