/* алгоритм процедуры восстановления баланса пирамиды
* при добавлении нового x[k]
*
* В x[] - исходный массив
* n - количество его элементов
* k - индекс добавляемого/просеиваемого элемента
*/
/* Это чтобы при k=0 и n=0
не делалось лишней перестановки*/
if 0 = n
exit
tmp = x[i] // Оставляем копию
while k <= n/2
childPos = 2*k+1 // Индекс левого ребенка
/* выбираем в childPos индекс большего ребенка */
if (childPos < n) && (x[childPos] < x[childPos + 1])
childPos++
/* Если x[k] больше максимального ребенка -
завершение */
if(tmp >= x[childPos]) break;
// иначе - меняем его с наибольшим ребенком
x[k] = x[childPos];
k = childPos;
}
/* В конце восстанавливаем просеянному элементу
его первоначальное значение */
x[k] = tmp;