#include <iostream> using namespace std;
void Swap(int *x, int *y) { int t; t = *x; *x = *y; *y = t; }
void HeapAdjust(int *a, int i, int size) { int lchild = 2 * i; int rchild = 2 * i + 1; int max = i; if (i <= size / 2) { if (lchild <= size && a[lchild] > a[max]) { max = lchild; } if (rchild <= size && a[rchild] > a[max]) { max = rchild; } if (max != i) { Swap(&a[i], &a[max]); HeapAdjust(a, max, size); } } }
void BuildHeap(int *a, int size) { int i; for (i = size / 2; i >= 1; i--) { HeapAdjust(a, i, size); } }
void HeapSort(int *a, int size) { BuildHeap(a, size); for (int i = size; i >= 1; i--) { Swap(&a[1], &a[i]); HeapAdjust(a, 1, i - 1); } }
int main() { int n, i; cin >> n; int *a = new int[n + 1]; for (i = 1; i <= n; i++) { cin >> a[i]; }
HeapSort(a, n);
for (i = 1; i <= n; i++) { cout << a[i] << " "; } cout << endl; return 0; }
|