洗牌算法

120 阅读1分钟

1、

function xipai(arr){
    let result=[];
    let random;
    while(arr.length>0){
        random=Math.floor(Math.random()*arr.length);
        result.push(arr[random]);
        arr.splice(random,1);
    }
    return result;
}

事件复杂度o(n*n);

2、

function xipai(arr){
    let length=arr.length;
    let random;
    let temp;
    while(length!=0){
        random=Math.floor(Math.random()*length);
        length--;
        temp=arr[length];
        arr[length]=arr[random];
        arr[random]=temp;
    }
    return arr;
}

事件复杂度o(n);

3、ES6

function xipai(arr){
    if(arr.length==0) return [];
    let length=arr.length;
    let random;
    while(length!=0){
        random=Math.floor(Math.random()*length--);
        [arr[random],arr[length]]=[arr[length],arr[random]];
    }
    return arr;
}

>>>无符号移位

参考链接: segmentfault.com/a/119000001…