1 #include<iostream> 2 #include<cmath> 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 }