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