From a21810eb49723a20e151aa878f9d2a67b552c82f Mon Sep 17 00:00:00 2001 From: devagya Date: Thu, 5 Oct 2023 06:54:26 +0530 Subject: [PATCH] heap_sort_added --- sorting/heap_sort__1.cpp | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sorting/heap_sort__1.cpp diff --git a/sorting/heap_sort__1.cpp b/sorting/heap_sort__1.cpp new file mode 100644 index 000000000..10d3e6346 --- /dev/null +++ b/sorting/heap_sort__1.cpp @@ -0,0 +1,79 @@ +// C++ program for implementation of Heap Sort + +#include +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) +{ + + // Initialize largest as root + int largest = i; + + // left = 2*i + 1 + int l = 2 * i + 1; + + // right = 2*i + 2 + int r = 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 << "\n"; +} + +// Driver's code +int main() +{ + int arr[] = { 12, 11, 13, 5, 6, 7 }; + int N = sizeof(arr) / sizeof(arr[0]); + + // Function call + heapSort(arr, N); + + cout << "Sorted array is \n"; + printArray(arr, N); +}