Изменения

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

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

16 байт добавлено, 11:51, 11 июня 2012
Восстановление свойств кучи
sift_down(i)
// heap_size - количество элементов в куче
if (2 * i + 1 <= A.heap_size) left = A[2 * i+ 1] // левый сын
else
left = inf
if (2 * i + 1 2 <= A.heap_size) right = A[2 * i + 12] // правый сын
else
right = inf
if (left == right == inf) return
if (right <= left && right < A[i])
swap(A[2 * i + 2], A[i])
sift_down(2 * i + 2)
if (left < A[i])
swap(A[2 * i + 1], A[i])
sift_down(2 * i + 1) if (left < A[i]) swap(A[2 * i], A[i]) sift_down(2 * i)
</code>
Если значение измененного элемента уменьшается, то свойства кучи восстанавливаются функцией sift_up(i).
Анонимный участник

Навигация