#include using namespace std; void siftDown(int* arr, int len, int index) { while (index * 2 + 1 < len) { int child1 = index * 2 + 1; int child2 = index * 2 + 2; int largest = index; if (child1 < len && arr[child1] > arr[largest]) { largest = child1; } if (child2 < len && arr[child2] > arr[largest]) { largest = child2; } if (largest != index) { swap(arr[index], arr[largest]); index = largest; } else { break; } } } void heapSort(int* arr, int n) { for (int i = n / 2 - 1; i >= 0; i--) { siftDown(arr, n, i); } for (int i = n - 1; i >= 0; i--) { swap(arr[0], arr[i]); siftDown(arr, i, 0); } } void printArray(int* arr, int n) { if (n > 0) printf("%d", arr[0]); for (int i = 1; i < n; i++) { printf(" %d", arr[i]); } printf("\n"); } int main() { int n = 5; int arr[] = {5, 1, 3, 2, 7}; heapSort(arr, n); printArray(arr, n); return 0; }