#include #include void Heapify(int A[], int i, int heapsize) { int left = 2 * i +1; int right = (2 * i) + 2; int largest = i; if (left <= heapsize && A[left] > A[largest]) { largest = left; } else { largest = i; } if (right <= heapsize && A[right] > A[largest]) { largest = right; } if (largest != i) { int temp = A[largest]; A[largest] = A[i]; A[i] = temp; Heapify(A, largest, heapsize); } } int main() { int size; int res = scanf("%d", &size); if (res != 1) { fprintf(stderr, "Error reading size\n"); return 1; } int *array = malloc(sizeof(int) * size); for (int i = 0; i < size; i++) { res = scanf("%d", &array[i]); if (res != 1) { fprintf(stderr, "Error reading array element\n"); free(array); return 1; } } printf("pre heap:"); for (int i = 0; i < size; i++) { printf("%d ", array[i]); } // Build the heap for (int i = size / 2 - 1; i >= 0; i--) { Heapify(array, i, size); } printf("\npost heap:"); for (int i = 0; i < size; i++) { printf("%d ", array[i]); } int heapsize = size; for (int i = size - 1; i >= 0; i--) { int temp = array[i]; array[i] = array[1]; array[1] = temp; heapsize--; Heapify(array, i, heapsize); } printf("\npost sort:"); for (int i = 0; i < size; i++) { printf("%d ", array[i]); } free(array); return 0; }