per quello che ricordo la funzione heapsort ha il compito di trasformare un vettore in un heap. Quindi l'elemento in posizione i avrà i figli in posizione 2*i+1 e 2*i+2.
Detto ciò il primo for ordina in modo che ogni padre ha i figli con valore + basso (quindi ad esempio l'elemento 2 ha un valore maggiore dell'elemento 5 e 6). Parte dal primo nodo che non è una foglia (quindi appunto da n/2). la funzione downheap sarà qualcosa tipo:
codice:
void downheap(int A[], int i, int heapsize){
int l,r, largest;
l = LEFT(i); //figlio sinistro
r = RIGHT(i); //figlio destro
if(l<heapsize && A[l]>A[i])
largest = l;
else largest = i;
if (r<heapsize && A[r]>A[largest])
largest = r;
if (largest != i){
Swap(A, i, largest);
downheap(A, largest, heapsize);
}
return;
nel while invece scambia il primo elemento con l'ultimo e ripete l'operazione di rimettere in ordine i valori...