write a c code for max heapsort descending order the program
write a c++ code for max heapsort descending order.( the program should do the follwing:
1) accept inputs from the user(the size of the array).
2) build maxheap.
3) sort the max heap in descending order.
Solution
Answer:-
Heap Sort
Heap sort is a comparison based sorting technique based on Binary Heap data structure. It is similar to selection sort where we first find the maximum element and place the maximum element at the end. We repeat the same process for remaining element.
Why array based representation for Binary Heap:
Since a Binary Heap is a Complete Binary Tree, it can be easily represented as array and array based representation is space efficient. If the parent node is stored at index I, the left child can be calculated by 2 * I + 1 and right child by 2 * I + 2 (assuming the indexing starts at 0).
Heap Sort Algorithm for sorting in increasing order:
 1. Build a max heap from the input data.
 2. At this point, the largest item is stored at the root of the heap. Replace it with the last item of the heap followed by reducing the size of heap by 1. Finally, heapify the root of tree.
 3. Repeat above steps until size of heap is greater than 1.
Program :
 #include <iostream>
 using namespace std;
 
 // To heapify a subtree rooted with node i which is
 // an index in arr[]. n is size of heap
 void heapify(int arr[], int n, int i)
 {
 int largest = i; // Initialize largest as root
 int l = 2*i + 1; // left = 2*i + 1
 int r = 2*i + 2; // right = 2*i + 2
 
 // If left child is larger than root
 if (l < n && arr[l] > arr[largest])
 largest = l;
 
 // If right child is larger than largest so far
 if (r < n && arr[r] > arr[largest])
 largest = r;
 
 // If largest is not root
 if (largest != i)
 {
 swap(arr[i], arr[largest]);
 
 // Recursively heapify the affected sub-tree
 heapify(arr, n, largest);
 }
 }
 
 // main function to do heap sort
 void heapSort(int arr[], int n)
 {
 // Build heap (rearrange array)
 for (int i = n / 2 - 1; i >= 0; i--)
 heapify(arr, n, i);
 
 // One by one extract an element from heap
 for (int i=n-1; i>=0; i--)
 {
 // Move current root to end
 swap(arr[0], arr[i]);
 
 // call max heapify on the reduced heap
 heapify(arr, i, 0);
 }
 }
 
 /* A utility function to print array of size n */
 void printArray(int arr[], int n)
 {
 for (int i=0; i<n; ++i)
 cout << arr[i] << \" \";
 cout << \"\ \";
 }
 
 // Driver program
 int main()
 {
 int arr[] = {12, 11, 13, 5, 6, 7};
 int n = sizeof(arr)/sizeof(arr[0]);
 
 heapSort(arr, n);
 
 cout << \" Heapsort array is \ \";
 printArray(arr, n);
 }


