Menu
Coddy logo textTech

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.
  • Фаза сортировки: на каждом шаге текущий максимум перемещается в конец, а размер кучи уменьшается, таким образом массив заполняется отсортированными элементами с конца.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Пирамидальная сортировка — Серия DSA