EMZETT.
Войти

Пирамидальная сортировка (Heapsort)

Коротко: Heapsort сортирует, превращая данные в max-кучу и затем многократно перемещая наибольший элемент в конец.

Подробнее: Она всегда работает за O(n log n), даже в худшем случае, и не требует дополнительной памяти. На практике, однако, обычно медленнее быстрой сортировки, потому что читает память скачками, а не линейно.

Подробности

  • Шаг 1: Массив за O(n) превращается в max-кучу: от середины назад каждый узел «просеивается» вниз.
  • Шаг 2: Корень (наибольший элемент) меняется местами с последним элементом. Куча уменьшается на 1, новый корень просеивается.
  • Повторять, пока куча не опустеет. Массив тогда отсортирован по возрастанию.
  • Свойства: не устойчива, на месте (in place), не зависит от предварительной упорядоченности.
  • Применение: Как запасной вариант в introsort, если быстрая сортировка уходит в слишком глубокую рекурсию. Сравните куча и очередь с приоритетом.

См. также: Сортировка слиянием