PassFront
  1. PassFront
  2. База знаний
  3. Сортировки и поиск

Сравните QuickSort и MergeSort: сложность и когда что выбрать.

Сортировки и поиск

QuickSort делит массив вокруг опорного элемента и в среднем даёт O(n log n) с малыми константами почти in-place, а MergeSort гарантированно работает за O(n log n) и стабилен, но требует O(n) дополнительной памяти.

QuickSort

  • Partition вокруг pivot, затем рекурсия по обеим частям.
  • Средний случай O(n log n); худший O(n²) — на отсортированном массиве при неудачном pivot. Лечится случайным выбором или median-of-three.
  • Не стабилен, зато потребляет лишь O(log n) стека.

MergeSort

  • Делит пополам и сливает отсортированные половины.
  • Всегда O(n log n), стабилен, предсказуем на связных списках и во внешней сортировке, когда данные не влезают в память.
  • Цена — буфер O(n).

Что выбирают на практике

Стандартные библиотеки используют гибриды: introsort (quick + heap при глубокой рекурсии) и Timsort (merge + вставки на естественных сериях).

Коротко для собеседования

QuickSort обычно быстрее на практике благодаря локальности данных и малым константам, но без случайного pivot может деградировать до O(n²). MergeSort выбирают, когда нужны стабильность, гарантированный худший случай или сортировка списков и данных на диске.

Другие вопросы раздела