Сортировка кучей :: Heap sort

Сортировка кучей || Пирамидальная сортировка || Heap sort

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

Алгоритм

Основная идея - ищем максимальный элемент в неотсортированной части массива и ставим его в конец этого подмассива. В поисках максимума подмассив перестраивается в так называемое сортирующее дерево (она же двоичная куча, она же пирамида), в результате чего максимум сам "всплывает" в начало массива. После этого перемещаем максимум в конец подмассива. Затем над оставшейся частью массива снова осуществляется процедура перестройки в сортирующее дерево с последующим перемещением максимума в конец подмассива.

Сортирующее (неубывающее) дерево - дерево у которого любой родитель не меньше чем каждый из его потомков. Если сортирующее дерево невозрастающее, то, соответственно, любой родитель не больше чем каждый из его потомков.

Сложность по времени

У алгоритма нет благоприятных и вырожденных случаев. При любом входящем массиве (даже если он почти отсортирован) сортировка имеет одну и ту же временную сложность - O(n log n).

Дополнительно

Сортировка кучей используется в целом ряде других алгоритмов сортировок.

Это как её непосредственные вариации:

Так и гибридные алгоритмы:

Характеристики алгоритма

НазваниеСортировка кучей (Heap sort, Пирамидальная сортировка, Pyramid sort)
АвторJ. W. J. Williams
Год1964
КлассСортировки выбором
УстойчивостьНет
СравненияДа
Сложность по времениЛучшаяO (n log n)
Средняя
Худшая
Сложность по памятиОбщаяO(n)
ДополнительнаяO(1)

Ссылки

J-сортировка

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

Heap sort

Реализация на различных ЯП