Heapify

Max Heapify :

void maxHeapify(int h[], int index, int size) {

    // Set largest as parent and set children
    int left = 2 * index;
    int right = 2 * index + 1;
    int largest = index;
    
    // If left child is greater, make largest point to it
    if (left <= size && h[left] > h[largest])
        largest = left;
    
    // If right child is greater, make largest point to it
    if (right <= size && h[right] > h[largest])
        largest = right;
        
    // If largest is not parent, swap it with passed index
    if (largest != index) {
        int temp = h[index];
        h[index] = h[largest];
        h[largest] = temp;
        maxHeapify(h, largest, size);
    }
    return;

}

Min Heapify :

void minHeapify(int h[], int index, int size) {

    // Set smallest as parent and set children
    int left = 2 * index;
    int right = 2 * index + 1;
    int smallest = index;
    
    // If left child is smaller, make smallest point to it
    if (left <= size && h[left] < h[smallest])
        smallest = left;
    
    // If right child is smaller, make smallest point to it
    if (right <= size && h[right] < h[smallest])
        smallest = right;
        
    // If smallest is not parent, swap it with passed index
    if (smallest != index) {
        int temp = h[index];
        h[index] = h[smallest];
        h[smallest] = temp;
        minHeapify(h, smallest, size);
    }
    return;

}

Note: To build a max heap or min heap, run the function n/2 times . Like this :

for (int i = size/2; i >= 1; i--) {
    maxHeapify(heap,i,size);
}

Last updated