void heapify(vector<int> &arr, int n, int i) {
int largest = i;
int lson = 2 * i + 1;
int rson = 2 * i +2;
if (lson < n && arr[lson] > arr[largest]) {
largest = lson;
}
if (rson < n && arr[rson] > arr[largest]) {
largest = rson;
}
if (largest != i) {
swap(&arr[largest], &arr[i]);
heapify(arr, n, largest);
}
}
void heapSort(vector<int> &arr) {
int i;
for (i = arr.size() / 2 - 1; i>=0; i--) {
heapify(arr, arr.size(), i);
}
for (i = arr.size() - 1; i > 0; i--) {
swap(&arr[0], &arr[i]);
heapify(arr, i, 0);
}
}