void pq_insert (priority_queue *q, int x) { q->n++; int index = q->n; int parent_index = pq_parent(index); q->q[index] = x; while(parent_index != -1 && q->q[parent_index] > q->q[index]) { q->q[index] = q->q[parent_index]; q->q[parent_index] = x; index = parent_index; parent_index = pq_parent(index); } }
// Find parents and swap if necessary void pq_bubble_up(prio_q* pq, int val) { // Start with given node and its parent int p = pq_parent(val); if(p == -1) return; // Swap if needed if(pq->q[p] < pq->q[val]) { pq_swap(pq, p, val); // Move to next pair pq_bubble_up(pq, p); } }