#include <stdio.h> // Function to heapify a subtree rooted with the node i void heapify(int arr[], int n, int i) { int largest = i; int left = 2 * i + 1; int right = 2 * i + 2; if (left < n && arr[left] > arr[largest]) { largest = left; } if (right < n && arr[right] > arr[largest]) { largest = right; } if (largest != i) { // Swap arr[i] and arr[largest] int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; heapify(arr, n, largest); } } // Function to perform 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); } // Extract elements from the heap one by one for (int i = n - 1; i >= 0; i--) { // Move current root to the end int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; // Call heapify on the reduced heap heapify(arr, i, 0); } } // Function to print an array void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); printf("Original array: "); printArray(arr, n); heapSort(arr, n); printf("Sorted array: "); printArray(arr, n); return 0; }