Table of Contents
Problem Statement
Example 2
method 1
pseudocode
Example: C implementation
Output
Method 2
in conclusion
Home Backend Development C++ Descending heap sort using min-heap

Descending heap sort using min-heap

Aug 29, 2023 pm 03:49 PM
Heap sort descending order min heap

Descending heap sort using min-heap

Heap Sort - Heap sort is a comparison-based algorithm that uses a binary tree data structure to sort a list of numbers in ascending or descending order. It creates a heap data structure by heap sorting where the root is the smallest element, then removes the root and sorts again giving the second smallest number in the list at the root position.

Min Heap - A min heap is a data structure in which the parent node is always smaller than the child node, so the root node is the smallest element among all elements.

Problem Statement

Given an array of integers. Sort them in descending order using min-heap.

Example 1

Input: [2, 5, 1, 7, 0]
Copy after login
Output: [7, 5, 2, 1, 0]
Copy after login

Example 2

Input: [55, 1, 23, 10, 1]
Copy after login
Output: [55, 23, 10, 1, 1]
Copy after login

method 1

To perform a heap sort in descending order using a min-heap, we create a min-heap of elements and extract one element at a time to get an array in descending order by reversing the order.

pseudocode

procedure heapSort (arr[], n)
   Initialize priority queue: minHeap
   for i = 1 to n
      add arr[i] to minHeap
   i = n - 1
   while minHeap is not empty
      arr[i–] = top element of minHeap
      Remove the top element of minHeap
end procedure
Copy after login

Example: C implementation

In the following program, we sort the array using min-heap and then reverse the order to get the result.

#include <bits/stdc++.h>
using namespace std;
// Function to heap sort in decreasing order using min heap
void heapSort(int arr[], int n){

   // Creating min heap using a priority queue
   priority_queue<int, vector<int>, greater<int> > minHeap;
   
   // Inserting input array to min heap
   for (int i = 0; i < n; i++){
      minHeap.push(arr[i]);
   }
   
   // Iterating backwards in the input array, where each element is replaced by the smallest element extracted from min heap
   int i = n - 1;
   while (!minHeap.empty()){
      arr[i--] = minHeap.top();
      minHeap.pop();
   }
}
int main(){
   int arr[6] = {5, 2, 9, 1, 5, 6};
   int n = 6;
   heapSort(arr, n);
   cout << "Sorted array : ";
   for (int i = 0; i < n; i++){
      cout << arr[i] << " ";
   }
   cout << endl;
   return 0;
}
Copy after login

Output

Sorted array : 9 6 5 5 2 1
Copy after login
Copy after login
Copy after login

Time complexity - O(nlogn)

Space complexity - O(n)

Method 2

Another solution to this problem is to build a min-heap starting from the last non-leaf root pattern and working backwards. We can then sort the array by swapping the root node and the last leaf node, and then restore the min-heap property.

pseudocode

procedure heapify (arr[], n , i)
   smallest = i
   l = 2i + 1
   r = 2i + 2
   if l < n and arr[l] < arr[smallest]
      smallest = l
   end if
   if r < n and arr[r] < arr[samllest]
      smallest = r
   end if
   if smallest is not i
      swap arr[i] to arr[smallest]
      heapify (arr, n, smallest)
   end if
end procedure

procedure heapSort (arr[], n)
   for i = n/2 - 1 to 0
      heapify(arr, n, i)
   for i = n-1 to 0
      swap arr[0] to arr[i]
      heapify (arr, i, 0)
end procedure
Copy after login

Example: C implementation

In the following program, we use the heapify() function to restore the min-heap properties of the subtree rooted at index i, and use heapSort() to build the min-heap in reverse order.

#include <bits/stdc++.h>
using namespace std;

// Restores the min heap property of subtree rooted at index i
void heapify(int arr[], int n, int i){
   int smallest = i;
   int l = 2 * i + 1;
   int r = 2 * i + 2;
   if (l < n && arr[l] < arr[smallest]){
      smallest = l;
   }
   if (r < n && arr[r] < arr[smallest]){
      smallest = r;
   }
   if (smallest != i){
      swap(arr[i], arr[smallest]);
      heapify(arr, n, smallest);
   }
}
void heapSort(int arr[], int n){

   // Build the min heap in reverse order
   for (int i = n / 2 - 1; i >= 0; i--){
      heapify(arr, n, i);
   }
   
   // Sort the array by repeatedly swapping the root node with the last leaf node
   for (int i = n - 1; i >= 0; i--){
      swap(arr[0], arr[i]);
      heapify(arr, i, 0);
   }
}
int main(){
   int arr[6] = {5, 2, 9, 1, 5, 6};
   int n = 6;
   heapSort(arr, n);
   cout << "Sorted array : ";
   for (int i = 0; i < n; i++){
      cout << arr[i] << " ";
   }
   cout << endl;
   return 0;
}
Copy after login

Output

Sorted array : 9 6 5 5 2 1
Copy after login
Copy after login
Copy after login

Using the previous method of creating a min-heap using the heapSort() function, we can use the same method in this solution, but instead of using heapify to restore the properties of the min-heap, we use the traditional hep sorting algorithm to create amin The order of heap and sorted elements is incremented and further reversed to obtain the desired output.

pseudocode

procedure heapSort (arr[], n)
   for i = n/2 - 1 to 0
   parent = i
      while parent *2+1 < n
         child = parent*2+1
         if child+1 < n and arr[child] >arr[child+1]
            child = child + 1
         end if
         if arr[parent] > arr[child]
            swap arr[parent] to arr[child]
            parent = child
         else
            break
         end if
   for i = n-1 to 0
      swap arr[0] to arr[i]
      parent = 0
      while parent*2+1 < i
            child = parent*2+1
         if child+1 < n and arr[child] >arr[child+1]
            child = child + 1
         end if
         if arr[parent] > arr[child]
            swap arr[parent] to arr[child]
            parent = child
         else
            break
         end if
end procedure
Copy after login

Example: C implementation

In the following program, we modify the heap sort algorithm to sort the array in descending order.

#include <bits/stdc++.h>
using namespace std;

void heapSort(int arr[], int n){
   // Building min heap in reverse order
   for (int i = n / 2 - 1; i >= 0; i--) {
   
      // Starting from last parent node, apply heapify operation
      int parent = i;
      while (parent * 2 + 1 < n) {
         int child = parent * 2 + 1;
         if (child + 1 < n && arr[child] > arr[child + 1]){
            child++;
         }
         if (arr[parent] > arr[child]){
            swap(arr[parent], arr[child]);
            parent = child;
         }
         else{
            break;
         }
      }
   }
   
   // Extarct elekemnhts form min heap in decreasing order
   for (int i = n - 1; i > 0; i--){
      swap(arr[0], arr[i]);
      int parent = 0;
      
      // Perform heapify operation at new root node
      while (parent * 2 + 1 < i){
         int child = parent * 2 + 1;
         if (child + 1 < i && arr[child] > arr[child + 1]){
            child++;
         }
         if (arr[parent] > arr[child]){
            swap(arr[parent], arr[child]);
            parent = child;
         }
         else {
            break;
         }
      }
   }
}
int main(){
   int arr[6] = {5, 2, 9, 1, 5, 6};
   int n = 6;
   heapSort(arr, n);
   cout << "Sorted array : ";
   for (int i = 0; i < n; i++) {
      cout << arr[i] << " ";
   }
   cout << endl;
   return 0;
}
Copy after login

Output

Sorted array : 9 6 5 5 2 1
Copy after login
Copy after login
Copy after login

in conclusion

In summary, in order to perform a descending heap sort using a min-heap, we can use a variety of methods, some of which have a time complexity of O(nlogn), and each method has a different space complexity.

The above is the detailed content of Descending heap sort using min-heap. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1663
14
PHP Tutorial
1264
29
C# Tutorial
1237
24
How to write a heap sort algorithm using C# How to write a heap sort algorithm using C# Sep 19, 2023 am 08:45 AM

How to use C# to write a heap sorting algorithm HeapSort is a sorting algorithm based on a complete binary heap, and its time complexity is O(nlogn). In this article, we will write the heap sort algorithm using C# and provide detailed code examples. Building a heap In the heap sort algorithm, you first need to build a max-heap (or min-heap). The property of the max heap is that the value of the parent node is greater than or equal to the value of its child node, while the opposite is true for the min heap. To build a max-heap, we can use an array to represent the heap. Heap nodes

How to implement heap sort algorithm using java How to implement heap sort algorithm using java Sep 19, 2023 pm 06:00 PM

How to use Java to implement heap sorting algorithm Heap sorting is a sorting algorithm based on the heap data structure, which takes advantage of the properties of the heap for sorting. Heap sort is divided into two main steps: building the heap and sorting. Building a heap: First, we need to build a large root heap or a small root heap based on the array to be sorted. For ascending sort, we need to build a large root heap; for descending sort, we need to build a small root heap. The property of a large root heap is that the value of a node is greater than or equal to the value of its child nodes. The property of a small root heap is: the value of a node is less than or equal to the value of its child node

Descending heap sort using min-heap Descending heap sort using min-heap Aug 29, 2023 pm 03:49 PM

Heap Sort - Heap sort is a comparison-based algorithm that sorts a list of numbers in ascending or descending order using a binary tree data structure. It creates a heap data structure by heap sorting where the root is the smallest element, then removes the root and sorts again giving the second smallest number in the list at the root position. Min Heap - A min heap is a data structure where the parent node is always smaller than the child node, so the root node is the smallest element among all elements. Problem StatementGiven an array of integers. Sort them in descending order using min-heap. Example 1Input:[2,5,1,7,0]Output:[7,5,2,1,0]Example 2Input:[55,1,23,10,1]Output:[55,23,10, 1,1

C++ program: Sort array elements in descending order C++ program: Sort array elements in descending order Sep 09, 2023 pm 07:09 PM

Arranging data items in an appropriate form is an important task while solving some problems. efficientway.Theelementsortingproblemisoneofthemostcommonlydiscussed sorting problem. In this article, we will see how to arrange array elements in descending order of their values ​​(in C++). In this field there are many different sorting algorithms used to sort numeric or non-numeric elements in a given order. In this article we will introduce only two simple methods sorting.Thebubblesortandtheselectionsort.Letusseethemone

Java program to sort array elements in descending order Java program to sort array elements in descending order Aug 27, 2023 pm 06:41 PM

An array is a collection of the same data type stored in some contiguous memory locations. Array is a class in the java.until package that provides predefined sorting in a static manner and has no return value. This is the syntax of Arrays.sort() method mentioned below - publicstaticvoidsort(int[]ar,intfrom_index,intto_index) In the above syntax we have ar - short for array name from_index - we can use it as optional Parameters where sorting needs to be run. to_index - optional parameter provides the index of the element. Here is an example Input:Array={2,6,23,

How to write a heap sort algorithm using PHP How to write a heap sort algorithm using PHP Jul 08, 2023 pm 07:13 PM

How to use PHP to write a heap sort algorithm Heap sort is an efficient sorting algorithm. Its core idea is to construct the sequence to be sorted into a binary heap, and then continuously adjust the structure of the heap to achieve sorting. This article will introduce how to write a heap sort algorithm using PHP and provide code examples for reference. Definition of Heap Before starting to write the heap sort algorithm, we first need to clarify the definition and properties of the heap. A heap is a complete binary tree with the following properties: for any node i, the following two conditions are met: the value of the parent node is always greater than or equal to the child node

Learn the principles and time complexity analysis of the heap sort algorithm in PHP. Learn the principles and time complexity analysis of the heap sort algorithm in PHP. Sep 19, 2023 am 11:12 AM

Learn the principle and time complexity analysis of the heap sort algorithm in PHP. Heap sort is a sorting algorithm based on the heap data structure, and its time complexity is O(nlogn). This article will introduce the principles of the heap sort algorithm in the PHP language and provide code examples. 1. The definition and properties of a heap. Before learning heap sorting, you first need to understand the definition and properties of a heap. A heap is a complete binary tree in which the value of each node is greater than or equal to the value of its child nodes. We call such a heap a big-max heap. On the contrary, if the value of each node is less than or

Java Error: Heap Sort Error, How to Handle and Avoid Java Error: Heap Sort Error, How to Handle and Avoid Jun 24, 2023 pm 11:17 PM

With the continuous development of computer science, Java has become one of the most important programming languages ​​in modern software development. However, when writing Java programs, we often encounter various errors and problems. Among them, heap sorting errors are one of the more common problems in Java programming. So, when a heap sort error occurs, how should we deal with and avoid it? 1. What is heap sort? Heap sort is a commonly used sorting algorithm, which can achieve sorting within O(n*logn) time complexity. Heap sort uses a so-called

See all articles