Задача: Пирамидальная сортировка
Псевдокод: Восстановление баланса пирамиды при добавлении нового x[k]
  1. /* алгоритм процедуры восстановления баланса пирамиды
  2. * при добавлении нового x[k]
  3. *
  4. * В x[] - исходный массив
  5. * n - количество его элементов
  6. * k - индекс добавляемого/просеиваемого элемента
  7. */
  8.  
  9. /* Это чтобы при k=0 и n=0
  10. не делалось лишней перестановки*/
  11. if 0 = n
  12. exit
  13.  
  14. tmp = x[i] // Оставляем копию
  15. while k <= n/2
  16. childPos = 2*k+1 // Индекс левого ребенка
  17.  
  18. /* выбираем в childPos индекс большего ребенка */
  19. if (childPos < n) && (x[childPos] < x[childPos + 1])
  20. childPos++
  21.  
  22. /* Если x[k] больше максимального ребенка -
  23. завершение */
  24. if(tmp >= x[childPos]) break;
  25.  
  26. // иначе - меняем его с наибольшим ребенком
  27. x[k] = x[childPos];
  28. k = childPos;
  29. }
  30. /* В конце восстанавливаем просеянному элементу
  31. его первоначальное значение */
  32. x[k] = tmp;