Задать вопрос
  • Ошибка переполнения стека в быстрой сортировке на JS. Как решить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрите, подаём на вход массив [1, 2, 3]
    fundam = Math.round(3 / 2) = 2.
    arr[2] = 3
    less = [1, 2, 3], так как в него попадают все элементы, меньшие или равные 3
    greater = []
    И снова вызываем сортировку массива [1, 2, 3]. Всё повторяется заново. При этом само число 3 будет добавлено в результат ещё раз.

    Во-первых, брать надо не round, а floor.
    Во-вторых, должно быть три массива - меньше опорного числа, равные ему и больше него.
    const qSort = (arr) => {
      if (arr.length < 2) {
        return arr;
      }
      const fund = arr[Math.floor(arr.length / 2)]
      let less = []
      let equal = []
      let greater = []
      for (let i = 0; i < 0; i += 1) {
        if (arr[i] < fund) {
          less.push(arr[i])
        }
        if (arr[i] === fund) {
          equal.push(arr[i])
        }
        if (arr[i] > fund) {
          greater.push(arr[i])
        }
      }
      return qSort(less) + equal + qSort(greater)
    }
    Ответ написан
    1 комментарий