# 洗牌算法

类似于洗牌,将所有牌的位置打乱,其中比较有代表性的是 Fisher-Yates Shuffle 算法

# Fisher-Yates Shuffle 算法

简单来说 Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。

# 算法思路

  1. 从数组中取出一个元素
  2. 在元素后面随机选取一个交换
  3. 执行 arr.length 次

# 代码实现

function shuffle(arr) {
  for (let i = 0; i < arr.length; i++) {
    let index = i + Math.floor(Math.random() * (arr.length - i))
    let temp = arr[i]
    arr[i] = arr[index]
    arr[index] = temp
  }
  return arr
}

let arr = [1, 2, 3, 4, 5, 6]
console.log(shuffle(arr))