*51*

# Heap Sort Algorithm

In this article, we will discuss the Heapsort Algorithm. Heap sort processes the elements by creating the min-heap or max-heap using the elements of the given array. Min-heap or max-heap represents the ordering of array in which the root element represents the minimum or maximum element of the array.

Heap sort basically recursively performs two main operations –

- Build a heap H, using the elements of array.
- Repeatedly delete the root element of the heap formed in 1
^{st}phase.

Before knowing more about the heap sort, let’s first see a brief description of **Heap.**

### What is a heap?

A heap is a complete binary tree, and the binary tree is a tree in which the node can have the utmost two children. A complete binary tree is a binary tree in which all the levels except the last level, i.e., leaf node, should be completely filled, and all the nodes should be left-justified.

### What is heap sort?

Heapsort is a popular and efficient sorting algorithm. The concept of heap sort is to eliminate the elements one by one from the heap part of the list, and then insert them into the sorted part of the list.

Heapsort is the in-place sorting algorithm.

Now, let’s see the algorithm of heap sort.

## Algorithm

**BuildMaxHeap(arr)**

**MaxHeapify(arr,i)**

## Working of Heap sort Algorithm

Now, let’s see the working of the Heapsort Algorithm.

In heap sort, basically, there are two phases involved in the sorting of elements. By using the heap sort algorithm, they are as follows –

- The first step includes the creation of a heap by adjusting the elements of the array.
- After the creation of heap, now remove the root element of the heap repeatedly by shifting it to the end of the array, and then store the heap structure with the remaining elements.

Now let’s see the working of heap sort in detail by using an example. To understand it more clearly, let’s take an unsorted array and try to sort it using heap sort. It will make the explanation clearer and easier.

First, we have to construct a heap from the given array and convert it into max heap.

After converting the given heap into max heap, the array elements are –

Next, we have to delete the root element **(89)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(11).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **89** with **11,** and converting the heap into max-heap, the elements of array are –

In the next step, again, we have to delete the root element **(81)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(54).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **81** with **54** and converting the heap into max-heap, the elements of array are –

In the next step, we have to delete the root element **(76)** from the max heap again. To delete this node, we have to swap it with the last node, i.e. **(9).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **76** with **9** and converting the heap into max-heap, the elements of array are –

In the next step, again we have to delete the root element **(54)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(14).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **54** with **14** and converting the heap into max-heap, the elements of array are –

In the next step, again we have to delete the root element **(22)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(11).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **22** with **11** and converting the heap into max-heap, the elements of array are –

In the next step, again we have to delete the root element **(14)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(9).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **14** with **9** and converting the heap into max-heap, the elements of array are –

In the next step, again we have to delete the root element **(11)** from the max heap. To delete this node, we have to swap it with the last node, i.e. **(9).** After deleting the root element, we again have to heapify it to convert it into max heap.

After swapping the array element **11** with **9,** the elements of array are –

Now, heap has only one element left. After deleting it, heap will be empty.

After completion of sorting, the array elements are –

Now, the array is completely sorted.

## Heap sort complexity

Now, let’s see the time complexity of Heap sort in the best case, average case, and worst case. We will also see the space complexity of Heapsort.

### 1. Time Complexity

Case | Time Complexity |
---|---|

Best Case | O(n logn) |

Average Case | O(n log n) |

Worst Case | O(n log n) |

**Best Case Complexity –**It occurs when there is no sorting required, i.e. the array is already sorted. The best-case time complexity of heap sort is**O(n logn).****Average Case Complexity –**It occurs when the array elements are in jumbled order that is not properly ascending and not properly descending. The average case time complexity of heap sort is**O(n log n).****Worst Case Complexity –**It occurs when the array elements are required to be sorted in reverse order. That means suppose you have to sort the array elements in ascending order, but its elements are in descending order. The worst-case time complexity of heap sort is**O(n log n).**

The time complexity of heap sort is **O(n logn)** in all three cases (best case, average case, and worst case). The height of a complete binary tree having n elements is **logn.**

### 2. Space Complexity

Space Complexity | O(1) |

Stable | N0 |

- The space complexity of Heap sort is O(1).

## Implementation of Heapsort

Now, let’s see the programs of Heap sort in different programming languages.

**Program:** Write a program to implement heap sort in C language.

**Output**

**Program:** Write a program to implement heap sort in C++.

**Output**

**Program:** Write a program to implement heap sort in C#.

**Output**

**Program:** Write a program to implement heap sort in Java.

**Output**

So, that’s all about the article. Hope the article will be helpful and informative to you.