DEV Community

loading...

BFE.dev #8. can you shuffle() an array?

jser_zanp profile image jser ・2 min read

BFE.dev is like a LeetCode for Front End developers. I’m using it to practice my skills.

Alt Text

This article is about the coding problem BFE.dev#8. can you shuffle() an array?

Analysis

The goal is to shuffle an array, seems pretty easy. Since shuffle is choose one of the all possible permutations, so we can choose the item one by one randomly from rest possible positions.

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]]
  }
}
Enter fullscreen mode Exit fullscreen mode

Code Not working

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]]
  }
}
Enter fullscreen mode Exit fullscreen mode

Above code looks working but actually not. It loops all the positions and randomly swaps with another.

Suppose we have an array of [1,2,3,4].

Let's look at number 1. The first step is to swap 1 with all 4 positions, chance is high that it is moved to the positions other than itself and later it is traversed and swapped again.

Now let's look at number 4. It is last number to be traversed, and it might be also swapped before its turn and never be traversed again.

So 1 and 4 have different chances of be swapped, 4 is obviously lower, so the result array is not randomly shuffled.

Passed

Alt Text

Here is my video explaining: https://www.youtube.com/watch?v=FpKnR7RQaHM

Hope it helps, you can have a try at here

Discussion (0)

pic
Editor guide