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

中等难度  -通过 / -执行

能否手写一个shuffle() ?

当传入一个数组的时候,shuffle()需要更换元素的顺序,每一种最终的数列都需要被相等的概率生成。

比如

const arr = [1, 2, 3, 4]

以上的数组共有4! = 24 中不同的排列

[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 2, 3]
[1, 4, 3, 2]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 1, 3]
[2, 4, 3, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 1, 3, 2]
[4, 2, 1, 3]
[4, 2, 3, 1]
[4, 3, 1, 2]
[4, 3, 2, 1]

你写的 shuffle() 需要按照相同的概率(1/24)来返回上述排列中的一种。

注意

你写的 shuffle()会被调用很多次,计算出每一种出现的概率,然后根据标准差来判断

ref: https://javascript.info/task/shuffle

一边解释一边码字。

(2)
(171)