liushuangls / memo

用于记录
1 stars 0 forks source link

常用算法 #48

Closed liushuangls closed 5 years ago

liushuangls commented 6 years ago
  1. 洗牌算法(js) 作用:用于打乱一个数组

原理:

  1. 从数组末尾开始,选取最后一个元素,然后在所有位置中随机产生一个位置,与最后一个元素交换。

  2. 对数组倒数第二个元素,在除去最后一个元素以外的所有位置中随机产生一个位置,与倒数第二个元素交换。

  3. 依次重复以上步骤。

shuffle(arr) {
  const newArr = arr.concat([])
  let len = arr.length
  while (len) {
    let i = Math.floor(Math.random() * len--)
    ;[newArr[len], newArr[i]] = [newArr[i], newArr[len]]
  }
  return newArr
}