15template <
typename T>
static void heapify_method(std::vector<T>& arr, int64_t n, int64_t parent) {
18 int64_t largest = parent;
21 int64_t left = 2 * parent + 1;
24 int64_t right = 2 * parent + 2;
27 if (left < n && arr[left] > arr[largest]) {
30 if (right < n && arr[right] > arr[largest]) {
33 if (largest != parent) {
34 std::swap(arr[parent], arr[largest]);
36 heapify_method(arr, n, largest);
44template <
typename T>
void heap_sort(std::vector<T>& arr) {
45 int64_t n = arr.size();
47 for (int64_t i = n / 2 - 1; i >= 0; i--) {
48 heapify_method(arr, n, i);
50 for (int64_t i = n - 1; i >= 0; i--) {
51 std::swap(arr[0], arr[i]);
53 heapify_method(arr, i, 0);