#include<iostream>
#include<vector>
using namespace std;

void maxHeep(vector<int> &list, int begin, int end){
    int dad = begin;
    int son = dad * 2 + 1;
    while (son <= end){
        if ((son + 1 <= end)&&(list[son]<list[son + 1]))
            son++;
        if (list[dad] > list[son])
            return;
        else{
            int temp;
            temp = list[dad];
            list[dad] = list[son];
            list[son] = temp;
            dad = son;
            son = dad * 2 + 1;
        }
    }
}

void heepSort(vector<int> &list){
    int len = list.size();
    for (int i = len / 2 - 1; i >= 0; --i){
        maxHeep(list, i,len-1);
    }

    for (int i = len - 1; i >0; --i){
        int temp = list[i];
        list[i] = list[0];
        list[0] = temp;
        maxHeep(list, 0, i-1);
    }

}

int main()
{
    vector<int> list = { 9, 3, 2, 5, 3, 3, 2, 0, -1, 3, 2, 5, 3, 3, 2, 0, -1, 3, 2, 5, 3, 3, 2, 0, -1,999 };
    heepSort(list);
    for (int i = 0; i < list.size(); ++i){
        cout << list[i] << ",";
    }
}