A Binary Heap is a Binary Tree having the different attributes. It's a fully grown tree (All levels are completely filled except possibly the last level, and the last level has all keys as left as possible). Because of this property, Binary Heap can be stored in an array.

A Binary Heap can only be either a Min or a Max Heap. In a Min Binary Heap, the root key must be the smallest of all the keys in the Binary Heap. For all nodes in a Binary Tree, the same property must be true recursively. Min-Heap is comparable to Max Binary Heap.

Let's start with a definition of a Complete Binary Tree. A complete binary tree is one in which every level is completely filled, save potentially the last, and all nodes are as far left as feasible.

A Binary Heap is a Complete Binary Tree in which items are stored in such a way that the value of a parent node is bigger (or smaller) than the values of its two offspring nodes. The former is known as max-heap, whereas the latter is known as min-heap. A binary tree or an array can be used to represent the heap.

## Relationship Between Array Indexes and Tree Elements

A collection of homogeneous (same type) data elements stored in contiguous memory regions is referred to as an array. If an array is of type "int", for example, it can only store integer elements, and cannot contain elements of other kinds like double, float, or char.

- A linear data structure in which items are stored in contiguous memory places is known as an array.
- We store components of the same datatype together in an array.
- Because the elements are stored in contiguous memory locations, it uses index-based addressing.
- The index ranges from 0 to (N – 1), where N denotes the number of members in the array.
- Because arrays in O allow for random access to elements (1). It speeds up access to elements based on their position.

The nodes are represented by the tree, which is connected by edges. The binary tree, or binary search tree, is a type of binary tree. It is a type of data structure that is used to store information and has the unique property that each node can only have two offspring. A binary tree combines the advantages of an ordered array and a linked list, with search times comparable to those of a sorted array and insertion and deletion times comparable to those of a linked list.

- Starting with the root node, a tree is a collection of nodes.
- Each node has a unique parent, and may or may not have numerous children.
- Each node has a value as well as links to the children.
- It's a type of rooted tree graph data structure.

## Heap Data Structure/Types of Heap

A Heap is a tree-based data structure with a complete binary tree. Heaps can be divided into two categories:

- Max-Heap: In a Max-Heap, the root node's key must be the greatest of all the keys present in all of its descendants. For all subtrees of that Binary Tree, the same property must be true recursively.
- Min-Heap: In a Min-Heap, the root node's key must be the smallest of all the keys present in all of its descendants. For all subtrees of that Binary Tree, the same property must be true recursively.

## Difference Between Min-Heap and Max-Heap

- A Min heap must meet the heap-order property, which states that the value stored at each node must be greater than or equal to the value stored at its offspring.
- Note the left-justified binary tree and the heap-order, in which each parent is greater or equal to its children is known as Max heap.

## What Is Heapify

The process of turning a binary tree into a Heap data structure is known as Heapify. A binary tree is a tree data structure with at most two child nodes for each node. A heap must be a complete binary tree, meaning that each level of the tree, save potentially the bottom level, is entirely filled. It is filled from left to right at this level.

## Working of Heap Sort

Let us understand the working of heap sort from the scratch:

### Understanding the Algorithm

- It is a data structure that is a binary tree in its entirety.
- Except for the last level, all of the levels are totally filled.
- Between parents and their children, Heap has some order of values that must be preserved.

There are two types of heaps that can be used.

#### MINIMUM HEAP

- The worth of a parent is always smaller than the worth of its children in this situation.
- As a result, root will be the smallest item in the heap.

#### MAXIMUM HEAP

- In this case, the worth of a parent always outweighs the value of its children.
- As a result, the root will have the highest value in the entire heap.

## Implementing Heap Sort in C

Heapsort(arr)

buildMaxHeap(arr)

for (int i = n - 1; i >= 0; i--) {

swap(&arr[0], &arr[i]);

heapsize--;

maxHeapify(arr,0);

}

## Applications of Heap Sort

- Heap Sort: Heap Sort sorts an array in O(nLogn) time using Binary Heap.
- Priority Queue: Because Binary Heap provides insert(), delete(), and extract max(), decreaseKey() operations in O(logn) time, priority queues may be created quickly.
- Binary Heap has two variants: Binomial Heap and Fibonacci Heap. These variants also do well when it comes to union.
- Priority queues are particularly useful in graph algorithms such as Dijkstra's Shortest Path and Prim's Minimum Spanning Tree.
- Heaps can be used to solve a wide range of problems.

## Time and Space Complexity in Heap Sort

It takes O(n/2) time to build the maximum heap.

We're using heapify inside the for loop, which, in the worst-case scenario, will use the height of the heap for all comparisons. As a result, the temporal complexity will be O (nlogn)

- Time Complexity at its Best: O (nlogn)
- Time Complexity on Average: O (nlogn)
- Time Complexity at its Worst: O (nlogn)

## Advantages of Heap Sort

- Because of its efficiency, the heap sort algorithm is commonly used.
- As an in-place sorting technique, the heap sort algorithm might be used.

## Disadvantages of Heap Sort

- Quick sort is substantially more efficient than Heap sort in many circumstances, and it uses less memory.
- Heap sorting necessitates additional sorting space.
- Heap sort creates a tree of sorting elements.

Advance your career as a MEAN stack developer with the Full Stack Web Developer - MEAN Stack Master's Program. Enroll now!

## Conclusion

The article discusses Heap Sort and its concept in detail. We covered the relationship between array indexes and tree elements, heap data structure and types of heap. We saw what heapify is, applications of heap sort, time and space complexity in heap sort. We learned the working and algorithm of heap sort along with how to implement the same. If you want to learn about the concept of heap sort in C in detail, you must enroll in the Full Stack Web Development course provided by Simplilearn. Also, those seeking a career in the field of C must enroll in the SkillUp course, a Simplilearn initiative. The SkillUp platform offers numerous free online courses to help with the basics of multiple programming languages.