Лучшие вопросы
Таймлайн
Чат
Перспективы

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

алгоритм сортировки Из Википедии, свободной энциклопедии

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

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

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

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

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

Remove ads

Алгоритм

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

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

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

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

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

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

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

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

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

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

Суммиров вкратце
Перспектива

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

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

Недостатки:

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

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

Remove ads

Применение

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

Примечания

Литература

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads