void qrand(int seq[], int n) { int k, p; for ( k = 0; k < n; k++ ) { seq[k] = k; } for ( k = 1; k < n; k++ ) { p = irand(k+1); arr_swap(seq, k, p); } }
void bubble_up(heap *h, unsigned i) { unsigned i_par=parent(i); while (h->buffer[i_par] > h->buffer[i]) { arr_swap(h->buffer, i, i_par); i=i_par; i_par=parent(i); } }
void bubble_down(heap *h, unsigned i) { while (is_valid_ind(h, i)) { int smallest=smaller_child(h, i); if (smallest == -1 || smallest == ((int) i)) { return; } else { arr_swap(h->buffer, i, smallest); i=smallest; } } }
int heap_pop(heap *h) { int retval=h->buffer[0]; arr_swap(h->buffer, 0, --h->size); bubble_down(h, 0); return retval; }