2021-06-04

手写shuffle()随机打乱一个数组

能否手写一个shuffle() ? 当传入一个数组的时候,shuffle()需要更换元素的顺序,每一种最终的数列都需要被相等的概率生成。 比如 const arr = [1, 2, 3, 4] 以上的...展开

/**
  * @param { any[] } arr
  */

// not the right shuffle
// function shuffle(arr) {
//   for (let i = 0; i < arr.length; i++) {
//     const j = Math.floor(Math.random() * arr.length)
//     ;[arr[i], arr[j]] = [arr[j], arr[i]]
//   }
// }

// [1, 2, 3]


// step1: first digit to be 1: 1/3
// step2: first digit to be 3: 1/3

// 1, 2, 3, 1: 1/3, 3: 0
// 2, 1, 3, 1: 1/3, 3: 0
// 3, 2, 1, 1: 0, 3: 1/3

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

WRITTEN BY

lidong

鄂ICP备20003892号Copyright © 2017-2023 leedong.cn

ABOUT ME

Hello,这里是「我的心情永不立冬」
一个想到什么就做什么的个人站点,所有内容纯主观、有偏见