-
[深圳|结业弟子]JS-钟俊0
要了解随机排序,这里你就要了解到洗牌算法了;
洗牌算法有很多种,这里给你介绍一种我比较喜欢也比较好用的;
好用不只是用起来方便,更指洗出来的随机数比较均匀;
Fisher-Yates Shuffle 上代码:
function shuffle(array) {
var m = array.length, t, i;
while (m) {
i = Math.floor(Math.random() * m--);
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}原理:
为了实现就地随机乱序,然后选择一个随机的剩余元素(从前面)并放置在它的新位置(在后面)。
后面的未洗过的元素被交换到前面,等待随后的随机;
加上代码,理解起来还是十分简单的;
而且更重要的是它的随机性能非常好,Fisher-Yates随机置乱算法是无偏的,所以每个排列都
是等可能的,当前使用的Fisher-Yates随机置乱算法是相当有效的,需要的时间正比于要随机
置乱的数,不需要额为的存储空间开销。
编辑于2018-09-14
- 去第 页