sort_03
一次履行结不雅为:[ 1023, 991, 1007, 967, 990, 1032, 968, 1061, 990, 971 ]。多次验证,同时在这儿查看shuffle(arr)函数结不雅的可视化分布,可以看到,这个办法可以认为足够随机了。
筹划二(Fisher–Yates shuffle)
须要留意的是,膳绫擎的办法固然知足随机性请求了,但在机能上并不是很好,须要遍历几回数组,还要对数组进行splice等操作。
考察Lodash 库中的 shuffle 算法,留意到它应用的实际上是Fisher–Yates 洗牌算法,这个算法由 Ronald Fisher 和 Frank Yates 于 1938 年提出,然后在 1964 年由 Richard Durstenfeld 改编为实用于电脑编程的版本。用伪代码描述如下:
- -- To shuffle an array a of n elements (indices 0..n-1):
- for i from n−1 downto 1 do
- j ← random integer such that 0 ≤ j ≤ i
- exchange a[j] and a[i]
一个实现如下(ES6):
- function shuffle(arr) {
- let i = arr.length;
- while (i) {
- let j = Math.floor(Math.random() * i--);
- [arr[j], arr[i]] = [arr[i], arr[j]];
- }
- }
或者对应的 ES5 版本:
- function shuffle(arr) {
- arr.sort(() => Math.random() - 0.5);
- }
- function shuffle(arr) {
- var i = arr.length, t, j;
- while (i) {
- j = Math.floor(Math.random() * i--);
- t = arr[i];
- arr[i] = arr[j];
- arr[j] = t;
推荐阅读
由大年夜数据触发的数据驱动的做法是一种最好的懂得。如今,各个组织正在各类数据构造,格局和分布式地舆数据源地位等方面进行竞争,并在时光框架和数量上跨越了现有体系的才能。以往人们>>>详细阅读
本文标题:关于JavaScript的数组随机排序
地址:http://www.17bianji.com/lsqh/34614.html
1/2 1