Deleting in a Heap

Procedure :

  • Copy the last element to root i.e index 1.
  • Shift the root element to last element of heap.
  • Set i as 1 (root) and j as 2*i (left child of root).
  • Perform the following until j < size - 1.
  • Find which of the child is greater.
  • Set j to point on that child.
  • If the child element (j) is greater than parent element (i), swap them.
  • Set i as j and j as 2*j after each iteration.
int deleteFromHeap(int h[], int size) {
​
// Copy last element to root and first element to last place
int lastElement = h[size];
int firstElement = h[1];
h[1] = lastElement;
h[size] = firstElement;
​
// Keep i at root and j at left child of root initially
int i = 1, j = 2*i;
​
while(j < size-1) {
​
// Find out if left child is greater or right child
if (h[j+1] > h[j])
j = j + 1;
// If child is greater than parent, interchange
if (h[j] > h[i]) {
int temp = h[i];
h[i] = h[j];
h[j] = temp;
// Set i to j and j to left child of j
i = j;
j = 2*j;
} else {
break;
}
}
return firstElement;
​
}
By calling the same function n times, heap sort can be implemented.