分享一个生成随机序列的算法
偶然看到一个面试问题:一个数组中有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 协议》,转载必须注明作者和本文链接