Изменения

Перейти к: навигация, поиск

Двоичная куча

94 байта добавлено, 23:57, 15 июня 2014
Восстановление свойств кучи
Работа процедуры: если <tex>i</tex>-й элемент меньше, чем его сыновья, всё поддерево уже является кучей, и делать ничего не надо. В противном случае меняем местами <tex>i</tex>-й элемент с наименьшим из его сыновей, после чего выполняем <tex> \mathrm {siftDown} </tex> для этого сына.
Процедура выполняется за время <tex>O(\log{N})</tex>.
====siftDown====
<code>
'''function''' siftDown(i : '''int'''):
swap(A[2 * i + 2], A[i])
i = 2 * i + 2
'''elseif'''A[2 * i + 1] < A[i]
swap(A[2 * i + 1], A[i])
i = 2 * i + 1
'''else'''
break
</code>
====siftUp====
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией <tex> \mathrm {siftUp} </tex>.
333
правки

Навигация