From 7608d243368f5df878e9c6067206749562210171 Mon Sep 17 00:00:00 2001 From: Shraddha09-Gupta22 <91560892+Shraddha09-Gupta22@users.noreply.github.com> Date: Mon, 31 Oct 2022 23:08:10 +0530 Subject: [PATCH] Create heapSort.cpp --- heapSort.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 heapSort.cpp diff --git a/heapSort.cpp b/heapSort.cpp new file mode 100644 index 0000000..a25bab0 --- /dev/null +++ b/heapSort.cpp @@ -0,0 +1,96 @@ +// Heap Sort in C + +#include + +// Function to swap the position of two elements + +void swap(int* a, int* b) +{ + + int temp = *a; + + *a = *b; + + *b = temp; +} + +// 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) +{ + // Find largest among root, left child and right child + + // Initialize largest as root + int largest = i; + + // left = 2*i + 1 + int left = 2 * i + 1; + + // right = 2*i + 2 + int right = 2 * i + 2; + + // If left child is larger than root + if (left < N && arr[left] > arr[largest]) + + largest = left; + + // If right child is larger than largest + // so far + if (right < N && arr[right] > arr[largest]) + + largest = right; + + // Swap and continue heapifying if root is not largest + // 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 max heap + for (int i = N / 2 - 1; i >= 0; i--) + + heapify(arr, N, i); + + // Heap sort + for (int i = N - 1; i >= 0; i--) { + + swap(&arr[0], &arr[i]); + + // Heapify root element to get highest element at + // root again + 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++) + printf("%d ", arr[i]); + printf("\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); + printf("Sorted array is\n"); + printArray(arr, N); +} + +// This code is contributed by _i_plus_plus_.