Быстрая сортировка на js, в чем ошибка?

function sorter(arr) {
  
  if (arr.length <= 1) {    
    return arr // если массив пустой или из 1 элемента, то он не нуждается в сортировке
  }
  
  /*
  из массива выделяем опорный элемент
  оставшиеся элементы делим на 2 новых массива:
  элементы меньшие опорного, элементы большие опорного
  */
  var supporting = arr[0]; // опорный элемент
  var smaller = []; // массив элементов меньше опорного
  var big = []; // массив элементов больше опорного
  
  arr.forEach(function(item, i, arr) {
    if (item < supporting) {
      smaller.push(i)
    } 
    if (item > supporting) {
    big.push(i)
  } 
});

  
 
  /*
  возвращаем массив меньших элементов + опорный + массив больших
  отправляем массивы сортироваться через рекурсию*/
  return sorter(smaller).concat(supporting, sorter(big))
}

sorter([3, 2, 1]) // [1, 1, 3] почему так((
  • Вопрос задан
  • 724 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так вы вместо элемента его индекс в массивы добавляете.
К тому же ошибка в логике. Все элементы, меньшие опорного в один массив, большие - во второй. А элементы, равные опорному куда?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы