让一个数组乱序

题目:把一个数组随机打乱顺序。

const arr = [1, 2, 3, 4, 5].sort(() => 0.5 - Math.random());

注:Array.prototype.sort 不是严格的均匀分布,仅作示意。

补充

补充:乱序算法的标准做法是 Fisher–Yates 洗牌:从后向前遍历,每个元素与它前面的随机一个位置交换,时间 O(n)、空间 O(1),分布均匀。

// Fisher–Yates 洗牌(推荐)
function shuffle(arr) {
  const a = arr.slice();
  for (let i = a.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [a[i], a[j]] = [a[j], a[i]];
  }
  return a;
}

shuffle([1, 2, 3, 4, 5]);