Пирамидальная сортировка![]() Пирамидальная сортировка (англ. Heapsort, «Сортировка кучей»[1]) — алгоритм сортировки, работающий в худшем, в среднем и в лучшем случае (то есть гарантированно) за операций при сортировке элементов.[2] Алгоритм работает «на месте» — количество задействованной служебной памяти , то есть фиксированное[1]. Может рассматриваться как усовершенствованная сортировка пузырьком, в которой элемент всплывает (min-heap) / тонет (max-heap) по многим путям. Пирамидальная сортировка была предложена Дж. Уильямсом[англ.] в 1963 году.[1] Алгоритм![]() ![]() Сортировка пирамидой использует бинарное сортирующее дерево. Сортирующее дерево — это такое дерево, у которого выполнены условия:
Удобная структура данных для сортирующего дерева — такой массив , что - элемент в корне, а потомки элемента являются и . Алгоритм сортировки будет состоять из двух основных шагов: 1. Выстраиваем элементы массива в виде сортирующего дерева[источник не указан 3145 дней]:
2. Будем удалять элементы из корня по одному за раз и перестраивать дерево. То есть на первом шаге обмениваем и , преобразовываем в сортирующее дерево. Затем переставляем и , преобразовываем в сортирующее дерево. Процесс продолжается до тех пор, пока в сортирующем дереве не останется один элемент. Тогда - упорядоченная последовательность.
Достоинства и недостаткиДостоинства:
Недостатки:
Сортировка слиянием при расходе памяти быстрее ( с меньшей константой) и не подвержена деградации на неудачных данных. Из-за сложности алгоритма выигрыш получается только на больших . На небольших (до нескольких тысяч) быстрее сортировка Шелла. ПрименениеПирамидальная сортировка активно применяется в ядре Linux[3]. Примечания
Литература
Ссылки
|
Portal di Ensiklopedia Dunia