From 858e67ef06eb950cc015110ed68eb667382c735c Mon Sep 17 00:00:00 2001 From: natashaa15 <111683567+natashaa15@users.noreply.github.com> Date: Mon, 17 Oct 2022 13:22:53 +0530 Subject: [PATCH] heap_sort.cpp Heap Sort Code in C++ --- C++/heap_sort.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 C++/heap_sort.cpp diff --git a/C++/heap_sort.cpp b/C++/heap_sort.cpp new file mode 100644 index 0000000..bdb808a --- /dev/null +++ b/C++/heap_sort.cpp @@ -0,0 +1,62 @@ +#include +using namespace std; +/* function to heapify a subtree. Here 'i' is the +index of root node in array a[], and 'n' is the size of heap. */ +void heapify(int a[], int n, int i) +{ + int largest = i; // Initialize largest as root + int left = 2 * i + 1; // left child + int right = 2 * i + 2; // right child + // If left child is larger than root + if (left < n && a[left] > a[largest]) + largest = left; + // If right child is larger than root + if (right < n && a[right] > a[largest]) + largest = right; + // If root is not largest + if (largest != i) { + // swap a[i] with a[largest] + int temp = a[i]; + a[i] = a[largest]; + a[largest] = temp; + + heapify(a, n, largest); + } +} +/*Function to implement the heap sort*/ +void heapSort(int a[], int n) +{ + + for (int i = n / 2 - 1; i >= 0; i--) + heapify(a, n, i); + // One by one extract an element from heap + for (int i = n - 1; i >= 0; i--) { + /* Move current root element to end*/ + // swap a[0] with a[i] + int temp = a[0]; + a[0] = a[i]; + a[i] = temp; + + heapify(a, i, 0); + } +} +/* function to print the array elements */ +void printArr(int a[], int n) +{ + for (int i = 0; i < n; ++i) + { + cout<