From 0aab25cdd98b78fbc3748451fbc17e7c34144ba1 Mon Sep 17 00:00:00 2001 From: natashaa15 <111683567+natashaa15@users.noreply.github.com> Date: Mon, 17 Oct 2022 13:25:25 +0530 Subject: [PATCH] heap_sort.c Heap Sort in C --- c_programs/heap_sort.c | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 c_programs/heap_sort.c diff --git a/c_programs/heap_sort.c b/c_programs/heap_sort.c new file mode 100644 index 0000000..58eb3d3 --- /dev/null +++ b/c_programs/heap_sort.c @@ -0,0 +1,61 @@ +#include +/* 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 arr[], int n) +{ + for (int i = 0; i < n; ++i) + { + printf("%d", arr[i]); + printf(" "); + } + +} +int main() +{ + int a[] = {48, 10, 23, 43, 28, 26, 1}; + int n = sizeof(a) / sizeof(a[0]); + printf("Before sorting array elements are - \n"); + printArr(a, n); + heapSort(a, n); + printf("\nAfter sorting array elements are - \n"); + printArr(a, n); + return 0; +}