Base/Knowledges/IT/Алгоритмы/Сортировки/Быстрая сортировка (Quick sort).md
2026-02-23 19:52:05 +03:00

2.4 KiB
Raw Blame History

#алгоритмы #сортировка

!Sorting_quicksort_anim.gif

Лучшая/Средняя эффективность O(n) = O(n*log_2{n}) Худшая эффективность O(n) = O(n^2)

Быстрая сортировка относится к алгоритмам сортировки. Она работает намного быстрее сортировки выбором и часто применяется в реальных программах. Основана на стратегии «Разделяй и властвуй (Divide and conquer)».

Последовательность:

  1. Выбрать опорный элемент
  2. Разделить массив на два подмассива: элементы, меньшие опорного, и элементы, большие опорного.
  3. Рекурсивно применить быструю сортировку к двум подмассивам.

Быстродействие быстрой сортировки сильно зависит от выбора опорного элемента. Предположим, опорным всегда выбирается первый элемент, а быстрая сортировка применяется к уже отсортированному массиву. Быстрая сортировка не проверяет, отсортирован входной массив или нет, и все равно пытается его отсортировать. В худшем случае существуют O(n) уровней, поэтому алгоритм займет время O(n) * O(n)=O(n^2)

!Pasted image 20250109093218.png

function quickSort(array) {
  if (array.length <= 1) {
    return array;
  }

  const middleIndex = Math.ceil(array.length / 2);
  const left = [];
  const right = [];

  for (let i = 0; i < array.length; i++) {
    if (i === middleIndex) {
      continue
    }

    if (array[i] < array[middleIndex]) {
      left.push(array[i])
    } else {
      right.push(array[i])
    }
  }

  return [
    ...quickSort(left),
      array[middleIndex],
    ...quickSort(right),
  ]
}

Источники: