никогда бы не подумал, что можно так долго угарать над комментариями к програмке:



template<class T>

void downHeap(T a[], long k, long n) {

// процедура просеивания следующего элемента

// До процедуры: a[k+1]...a[n] - пирамида

// После: a[k]...a[n] - пирамида

T new_elem;

long child;

new_elem = a[k];



while(k <= n/2) { // пока у a[k] есть дети

child = 2*k;

// выбираем большего сына

if( child < n && a[child] < a[child+1] )

child++;

if( new_elem >= a[child] ) break;

// иначе

a[k] = a[child]; // переносим сына наверх

k = child;

}

a[k] = new_elem;

}



заодно узнаете, что такое пирамидоидальная сортировка