数组的随机排序(含洗牌算法)

您所在的位置:网站首页 matlab生成随机数组并排序 数组的随机排序(含洗牌算法)

数组的随机排序(含洗牌算法)

2023-11-13 20:25| 来源: 网络整理| 查看: 265

function compare (a, b) { // 省略一些代码…… return val; }

如果你想将 a 变量排列在变量 b 的前面位置,则比较函数返回负数(即上述 val 为负数);若想将 a 变量排列在变量 b 的后面,则返回正数(即上述 val 为正数);若不需要改变 a、b 变量之间的顺序,则返回 0(即上述 val 为 0)。

因此有了以下代码:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; arr.sort(function (a, b) { return Math.random() - 0.5; }); console.log(arr); 洗牌算法

上述方法比较简单,且代码量少,短小精悍。这里我再讲一种比上面复杂一些的洗牌算法,通过它也能达到数组随机排序的效果。那下面就开讲啦~

首先是要明白它的洗牌原理,该算法需要遍历整个数组,当遍历到第 i(i 为数组元素的索引)个元素时,从 0 到 i 随机挑选出一个数字,记为 index,然后对索引为 i 和 index 的数组元素进行互换,直至遍历结束。如此下来,也即完成了数组的随机排序。来看下代码吧:

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; function shuffle (arr) { var len = arr.length; for (var i = 0; i < len; i++) { // 生成 0 到 i 之间的随机整数 var index = Math.floor(Math.random() * (i + 1)); // 使用 ES6 中的解构赋值完成两个变量值的交换 [arr[i], arr[index]] = [arr[index], arr[i]]; } return arr; } console.log('Shuffled arr: ', shuffle(arr));

以上就是我目前想到的两种方法,在这里分享给大家,若有不足之处,请予以指出,感谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3