Pseudo Code
Урок 4 из 9 курса Пирамидальная сортировка — Серия DSA на Coddy.
siftDown(array, i, size):
loop:
largest = i
left = 2*i + 1
right = 2*i + 2
if left < size and array[left] > array[largest]: largest = left
if right < size and array[right] > array[largest]: largest = right
if largest == i: stop
swap array[i] and array[largest]
i = largest
heapSort(array):
n = length(array)
for i from n/2 - 1 down to 0: # построение max-heap
siftDown(array, i, n)
for end from n-1 down to 1: # многократное извлечение максимума
swap array[0] and array[end]
siftDown(array, 0, end)- siftDown проталкивает слишком малый родительский элемент вниз мимо его большего дочернего элемента до тех пор, пока свойство max-heap не будет восстановлено.
size— это часть массива, которая все еще является частью кучи. - Фаза построения: просеивание вниз каждого нелистового узла (от последнего родителя с индексом
n/2 - 1до корня) превращает любой массив в max-heap. - Фаза сортировки: на каждом шаге текущий максимум перемещается в конец, а размер кучи уменьшается, таким образом массив заполняется отсортированными элементами с конца.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Пирамидальная сортировка — Серия DSA
2The Algorithm
How it works?Pseudo CodeImplementation (Part 1)Implementation (Part 2)