Вызов:

Учитывая массив элементов, вернуть перетасованный массив элементов. Сохраняйте линейную сложность.

Подход:

нам нужно случайным образом изменить положение каждого элемента в предоставленном массиве. Чтобы снизить сложность, нам нужно перебирать каждый элемент только один раз. У нас может быть переменная-счетчик для перемещения по индексам массива, который необходимо изменить в данный момент, и заменять этот элемент значением по случайно определенному индексу.

Решение:

Давайте создадим вспомогательную функцию, которая поможет нам поменять местами значения в одном и том же массиве с разными индексами.

var swap = function(a, b, arr){
  var temp = arr[a];
  arr[a] = arr[b];
  arr[b] = temp;
  return arr;
}

Теперь, основываясь на нашем подходе, мы можем перебирать массив, используя эту функцию подкачки, для случайного изменения значений.

var shuffleArray = function(array) {
  var length = array.length;
  while(length > 0){
    let i = Math.floor(Math.random()*length)
    length--
    swap(length, i, array)
  }
  return array;
};

И вот у вас есть перетасованный массив практически случайным образом.