×

C++ Heap Sort

Heapsort is executed on the structure of the heap data. We know heap is a complete tree in binary form. The heap tree can be of two different types: Min-heap, or heap max. The root element is minimal for min-heap, and maximum for a max heap. Upon forming a heap, we can remove an object from the root and transfer the last element to the root. After this procedure of swapping, we have to heap the whole array again. We can filter the entire array by removing elements from the root.

The complexity of Heap Sort Technique

  • Time Complexity: O(n log n)
  • Space Complexity: O(1)

Input and Output

Input:

A list of unsorted data: 50 4 11 40 32 81 70

Output:

Array before Sorting: 50 4 11 40 32 81 70

Array after Sorting: 4 11 32 40 50 70 81

Algorithm

Input: A data array, and the total number in the array

Output: Max heap using an element in an array

Begin
for k := 1 to size do
node := k
par := floor (node / 2)
while par >= 1 do
if array[par] < array[node] then
swap array[par] with array[node]
node := par
par := floor (node / 2)
done
done
End

What is a Binary Heap?

This Binary Heap is a complete binary tree in which entities are placed in a special order, such that a parental node’s value is greater than its two nodes’ values. The former is called a heap max, while the latter a heap min. The heap can be described through an array or binary tree.

Algorithm for sorting in increasing order:-

  1. Create a maximum heap of the data input.
  2. The greatest element is placed at the root of the heap at this stage. Replace it with the last heap component, then increase the heap size by 1.
  3. Repeat steps above whilst heap size is greater than 1.

How to create a heap?

The heapify procedure can only be implemented to a node if it heaps its children’s nodes. Thus heapification must be carried out in the order from the bottom up.

Using an example let’s understand:

Input data: 6, 20, 2, 7, 1
         6(0)
        /   \
     20(1)   2(2)
    /   \
 7(3)    1(4)

The numbers in bracket represent the indices in the array representation of data.

Applying the heapify procedure to index 1:
         6(0)
        /   \
    20(1)    2(2)
    /   \
7(3)    1(4)
Applying the heapify procedure to index 0:
        20(0)
        /  \
     7(1)  2(2)
    /   \
 6(3)    1(4)
The heapify procedure calls itself recursively to build the heap
 in the top down manner.

Example of heap sort implementation:

// C++ program for implementation of Heap Sort
include
using namespace std;
void heapify(int arr[], int s, int k)
{
    int largest = k; // Initialize largest as root
    int P = 2k + 1; // left = 2k + 1
    int v= 2k + 2; // right = 2k + 2
    if (P < s && arr[P] > arr[largest]) largest = P; // If right child is larger than largest so far
    if (v < s && arr[v] > arr[largest]) largest = v; // If largest is not root
    if (largest != k)
    {
    swap(arr[k], arr[largest]);  // Recursively heapify the affected sub-tree
        heapify(arr, s, largest);
    }
}  // main function to do heap sort
void heapSort(int arr[], int s)
{
    // Build heap (rearrange array)
    for (int k = s / 2 - 1; k >= 0; k--)
    heapify(arr, s, k);  // One by one extract an element from heap
    for (int k=s-1; k>0; k--)
    {
        // Move current root to end
        swap(arr[0], arr[k]);
        // call max heapify on the reduced heap
        heapify(arr, k, 0);
    }
}
/* A utility function to print array of size s */
void printArray(int arr[], int s)
{
    for (int k=0; k<s; ++k)
        cout << arr[k] << " ";
    cout << "\n";
}
// Driver program
int main()
{
    int arr[] = {20, 10, 16, 4, 8, 6, 2, 44};
    int s = sizeof(arr)/sizeof(arr[0]);
    heapSort(arr, s);
    cout << "Sorted array is \n";
    printArray(arr, s);
}
Heap Sort in C++

Related Topics

C++ this pointer

'this' is a pointer that points to the object for which this function was called. The 'this' pointer holds the memory address of the current object. The 'this' pointer is implicitly passed to...

2 minutes read.

Functors in C++

Functors are not a very popular thing among beginner or intermediate-level programmers. But this thing is very useful and helpful. The name functor suggests us some similarities with function. It...

3 minutes read.

How to make a password program in C++

Before understanding the password program, one must know about a password and why it is required. Password: A password is a word that permits access to somewhere or something. A password...

4 minutes read.

gmtime() function in C/C++

C++ language is used to make high-performance applications that can work efficiently. It is one of the world's most popular languages. It is an object-oriented and high-level programming language, which...

4 minutes read.

fread() Function in C++ Programming

C++ language is used to make high-performance applications that can work efficiently, and it is one of the world's most popular languages. It is an object-oriented and high-level programming language;...

3 minutes read.

C++ If-else-if

Introduction: If-else-if control statement is an if statement used with an optional else if control statement to check multiple conditions. In this control statement, when any one of the condition returns...

4 minutes read.

Random Number Generator in C++

In programming, we need to frequently create the randomly. For example, a dice game, handing out cards to players, apps for rearranging tunes, etc. T There are two tools available in...

4 minutes read.

C++ operator

In this article, we will discuss about the operators in C++ with their types and examples. An operator is specially a symbol that tells compiler to perform specific manipulation. C++ contains...

5 minutes read.

C++ Object Class

C++ Object Class Overview: C++ is a high-level programming language and an object-oriented programming language. An object-oriented language always has some properties of classes and objects. In this article, we...

4 minutes read.

Function overloading in C++

Function overloading in C++ As we know that C++ works on the OOP Concepts, that are abstraction, encapsulation, and data hiding, it also uses the other important feature of OOP, which...

8 minutes read.

Decimal to Binary in C++

What is the meaning of Decimal Numbers? Decimal numbers range from 0 to 9, there are a total of ten digits between 0 and 9. Any number with more than two...

3 minutes read.

Passing by Reference Vs. Passing by the pointer in C++

 Passing by Reference Vs. Passing by the pointer in C++ Throughout C++, it can transfer parameter values except by pointers or through referring to a function. For both cases, we have...

3 minutes read.

C++ Aggregation

C++ Aggregation Definition: In C++, aggregation is a process in which one class (as an entity reference) defines another class. It provides another way to reuse the class. It represents...

4 minutes read.

Reverse an Array in C++

The many approaches to reverse an array in the C++ programming language will be discussed in this section. The term "reverse of an array" refers to changing the order of...

8 minutes read.

Include Guards in C++

In C++ programming, we frequently utilize a class more than once, so it is necessary to create a header file and include it in the main program. Now, occasionally a...

3 minutes read.

Bitwise Operator vs Logical Operator

Bitwise Operator  Bitwise operators perform operations bit by bit on bits.The value is converted to abinary during operations like addition, subtraction, division, and so on. These operations are carried out at the...

3 minutes read.

C++ Program: Matrix Multiplication

Matrix Multiplication in C++ What is a Matrix? A matrix is a set of numbers in the form of rows and columns forming a rectangular array. It includes numbers, which are often...

4 minutes read.

C++ Ternary Operator

In this tutorial, we'll learn about the C++ ternary operator and how to utilise it to manage the program's flow using examples. Ternary Operator: The if-else statement and the conditional operator use...

3 minutes read.

C++ find missing in the second array

Given two arrays A and B of sizes n and m. Find the elements from array A that are not present in array B. Example Input : a[] = {1, 2, 3, 5,...

3 minutes read.

Char Array to String in C++

Regardless of the programming language you use, data structure is critical to the success of your project. Although each programming language has its own collection of data structures, C++ contains a...

4 minutes read.