#include<iostream>
#include <type_traits>
#include <vector>
#include <algorithm>
using namespace std;
void getMixHeap(vector<int>& nums, int n, int i) {
int f = i;
int l = 2*i + 1;
int r = 2*i + 2;
if(l < n && nums[l] > nums[f]) {
f = l;
}
if(r < n && nums[r] > nums[f]) {
f = r;
}
if(i != f) {
swap(nums[f], nums[i]);
getMixHeap(nums, n, f);
}
}
void heapSort(vector<int>& nums) {
int n = nums.size();
for(int i = n - 1; i >= 0; i--) {
getMixHeap(nums, n, i);
}
for(int i = n - 1; i >= 0; i--) {
swap(nums[i], nums[0]);
getMixHeap(nums, i, 0);
}
}
void printV(vector<int>& nums) {
for(int num : nums) {
cout << num << " ";
}
}
int main() {
vector<int> nums = {1, 5, 6, 9, 23, 45, 1, 7, 7};
heapSort(nums);
printV(nums);
return 0;
}