美文网首页JavaScript 实用技巧
实现数组的随机排序(含洗牌算法)

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

作者: 奕玄 | 来源:发表于2019-03-06 21:39 被阅读0次

有时,我们需要将一个数组内的元素顺序进行打乱,达到随机排序的目的。首先想到的是 Math.random() 方法结合数组的 sort() 方法。

Math.random() 结合 sort() 方法

Math.random() 方法用于产生一个介于 0 和 1 之间的随机数(含 0 但不包括 1)。

数组的 sort() 方法可以有两种用法:

用法一:在不传入可选的函数参数时,将会对数组的每一个元素应用 toString() 方法,通过比较字符串大小的方式升序排列所有的数组项。

用法二:编写比较函数并作为参数传入,假设有以下比较函数(补充一点关于下面参数 a、b 的说明,若 a 为数组的第一个元素,则 b 为第二个元素,依次类推……),

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));

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

相关文章

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

    有时,我们需要将一个数组内的元素顺序进行打乱,达到随机排序的目的。首先想到的是 Math.random() 方法结...

  • 洗牌算法:数组随机排序

    最近做音乐播放器,基本功能已实现,准备再写一个循环播放功能,其中涉及列表循环、单曲循环、随机循环。实现这几个功能本...

  • js经典算法记录

    随机数组洗牌 简单的日期字符串排序 递归实现数组扁平化 极简版数组扁平化 记录数组项重复次数 冒泡排序 快速排序(...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

  • 洗牌算法具体指的是什么

    1.背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常会碰到,本质是让一个数组内的元素随机排列。 类...

  • 洗牌算法具体指的是什么

    今天给大家分享一下:洗牌算法具体指的是什么。 一、背景介绍 洗牌算法是我们常见的随机问题,在玩游戏、随机排序时经常...

  • 洗牌算法

    音乐软件中的随机播放算法是怎样实现的? 洗牌算法(Shuffle) 生成一个随机数(Random) 这里给出洗牌算...

  • JS中随机排列数组顺序(经典洗牌算法)和数组的排序方法

    经典洗牌算法 洗牌算法是一个经典的算法,其核心就是让一个数组的值随机排列,重点在于“随机”和“程序效率”。网上一直...

  • 抢红包算法@随机算法

    生成随机数 注:randomElement() 如果 range 是空,返回 nil 数组随机 洗牌算法 Swif...

  • Sort Algorithm

    排序算法 Tool implement 生成随机的n个数量的数组,输出数组每一个元素的内容。测试排序算法使用的标准...

网友评论

    本文标题:实现数组的随机排序(含洗牌算法)

    本文链接:https://www.haomeiwen.com/subject/nsrfpqtx.html