1 #include
2 #include
3 using namespace std;
4
5 int a[100010];
6 int lengtha;
7 void heapify(int a[], int i)
8 {
9 int l = i * 2, r = i * 2 + 1, maxx = i;
10 if (l <= lengtha && a[l] > a[i])
11 {
12 maxx = l;
13 }
14 else{
15 maxx = i;
16 }
17 if (r <= lengtha && a[r] > a[maxx])
18 {
19 maxx = r;
20 }
21 if (maxx != i)
22 {
23 swap(a[i], a[maxx]);
24 heapify(a, maxx);
25 }
26 }
27 void build_heap(int a[])
28 {
29 for (int i = floor(lengtha/2); i >= 1; i--)
30 {
31 heapify(a, i);
32 }
33 }
34 void heap_sort(int a[])
35 {
36 build_heap(a);
37 for (int i = lengtha; i >= 2; i--)
38 {
39 swap(a[1], a[i]);
40 lengtha--;
41 heapify(a, 1);
42 }
43 }
44 int main()
45 {
46
47 int n;
48 cin >> n;
49 for (int i = 1; i <= n; i++)
50 {
51 cin >> a[i];
52 }
53 lengtha = n;
54 heap_sort(a);
55 for (int i = 1; i <= n; i++)
56 {
57 cout << a[i] << " ";
58 }
59 return 0;
60 }