Interested Article - Пирамидальная сортировка

Анимированная схема алгоритма

Пирамидальная сортировка ( англ. Heapsort , «Сортировка кучей» ) — алгоритм сортировки , работающий в худшем, в среднем и в лучшем случае (то есть гарантированно) за операций при сортировке элементов. Алгоритм работает «на месте» — количество задействованной служебной памяти , то есть фиксированное .

Может рассматриваться как усовершенствованная сортировка пузырьком , в которой элемент всплывает ( min-heap ) / тонет ( max-heap ) по многим путям.

Пирамидальная сортировка была предложена в 1963 году.

Алгоритм

Пример сортирующего дерева
структура хранения данных сортирующего дерева

Сортировка пирамидой использует бинарное сортирующее дерево . Сортирующее дерево — это такое дерево, у которого выполнены условия:

  1. Каждый лист имеет глубину либо , либо , — максимальная глубина дерева.
  2. Значение в любой вершине не меньше (другой вариант — не больше) значения её потомков.

Удобная структура данных для сортирующего дерева — такой массив , что - элемент в корне, а потомки элемента являются и .

Алгоритм сортировки будет состоять из двух основных шагов:

1. Выстраиваем элементы массива в виде сортирующего дерева [ источник не указан 2651 день ] :

при .
Этот шаг требует операций.

2. Будем удалять элементы из корня по одному за раз и перестраивать дерево. То есть на первом шаге обмениваем и , преобразовываем в сортирующее дерево. Затем переставляем и , преобразовываем в сортирующее дерево. Процесс продолжается до тех пор, пока в сортирующем дереве не останется один элемент. Тогда - упорядоченная последовательность.

Этот шаг требует операций.

Достоинства и недостатки

Достоинства:

  • Имеет доказанную оценку худшего случая .
  • Сортирует на месте, то есть требует всего дополнительной памяти (если дерево организовывать так, как показано выше).

Недостатки:

Сортировка слиянием при расходе памяти быстрее ( с меньшей константой) и не подвержена деградации на неудачных данных.

Из-за сложности алгоритма выигрыш получается только на больших . На небольших (до нескольких тысяч) быстрее сортировка Шелла .

Применение

Пирамидальная сортировка активно применяется в ядре Linux .

Примечания

  1. . Дата обращения: 20 марта 2009. Архивировано из 15 марта 2009 года.
  2. . Дата обращения: 30 сентября 2017. 4 июня 2012 года.
  3. . git.kernel.org . Дата обращения: 7 июля 2023. 7 июля 2023 года.

Литература

Ссылки

  • — подробное описание с иллюстрациями и примером реализации на C++ . Приведён вывод оценок скорости работы алгоритма и измерение времени работы на реальной вычислительной системе.
  • — доходчивое описание с иллюстрациями и примером реализации на Pascal .
  • от 20 сентября 2017 на Wayback Machine
Источник —

Same as Пирамидальная сортировка