分享一個生成隨機序列的演算法

李曦贊發表於2017-07-27

偶然看到一個面試問題:一個陣列中有0-99共100個數,要求打亂這個陣列的順序,越亂越好。下班在家裡想了很久只想到一些暴力方法,效率還不高。今天在地鐵上靈光一閃,想到一種特別巧妙的演算法,特地和大家分享下:給陣列裡面每個元素加上隨機的權重,然後根據權重排序。程式碼是JavaScript(寫起來舒服),各位大大不要打我啊,逃

function getRandomList(arr) {
    let maxWeight = 10 * arr.length; //減小重複機率
    let list = [];
    for(let i in arr) {
        list.push({
            weight: Math.ceil(maxWeight * Math.random()),
            value: arr[i]
        });
    }
    list.sort(function(a, b) {
        return a.weight > b.weight;
    });

    let ans = [];
    for(let i in list) {
        ans.push(list[i].value);
    }
    return ans;
}

後面查資料發現《演算法導論》已經有這種演算法的記載了,哎,人醜還是得多看書。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章