PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Какая сложность сортировки списка?

Продвинутые темы

Сложность сортировки списка зависит от алгоритма: эффективные (быстрая, слиянием, встроенный `sort`) — O(n log n), простые (пузырьком, вставками) — O(n²).

Зависит от алгоритма

Эффективные — O(n log n)

  • Быстрая (quicksort) — O(n log n) в среднем, O(n²) в худшем.
  • Слиянием (merge sort) — O(n log n) всегда, но O(n) памяти.
  • Пирамидальная (heap sort) — O(n log n).

O(n log n) — теоретический предел для сортировок сравнением.

Простые — O(n²)

  • Пузырьком, вставками, выбором — O(n²) (вложенные циклы). Для малых данных или учебные.

Специальные — O(n)

  • Подсчётом (counting), поразрядная (radix) — O(n) для целых в ограниченном диапазоне (без сравнений).

Встроенный Array.prototype.sort

В V8 — Timsort (гибрид merge + insertion):

arr.sort((a, b) => a - b); // O(n log n), стабильная
  • O(n log n) в среднем и худшем.
  • Стабильная (с ES2019).
  • Эффективна на частично отсортированных данных.

Что влияет на выбор

  • Размер данных, память (merge требует O(n)), нужна ли стабильность, тип данных (radix для целых).

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

Сложность сортировки зависит от алгоритма: эффективные (quicksort, merge sort, heap sort) — O(n log n) (предел для сортировок сравнением); простые (пузырёк, вставки) — O(n²); специальные (counting, radix) — O(n) для целых. Встроенный Array.sort — Timsort, O(n log n), стабильный.

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