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]
Output: [7, 5, 2, 1, 0]
Example 2
Input: [55, 1, 23, 10, 1]
Output: [55, 23, 10, 1, 1]
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
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; }
Output
Sorted array : 9 6 5 5 2 1
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
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; }
Output
Sorted array : 9 6 5 5 2 1
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
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; }
Output
Sorted array : 9 6 5 5 2 1
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











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 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

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

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

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 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 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

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
