偶然看到一個面試問題:一個陣列中有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 協議》,轉載必須註明作者和本文連結