AlgoPlus v0.1.0
Loading...
Searching...
No Matches
heap_sort.h
1#ifndef HEAP_SORT_H
2#define HEAP_SORT_H
3
4#ifdef __cplusplus
5#include <cstdint>
6#include <iostream>
7#include <vector>
8#endif
9
15template <typename T> static void heapify_method(std::vector<T>& arr, int64_t n, int64_t parent) {
16
17 // largest node
18 int64_t largest = parent;
19
20 // left child
21 int64_t left = 2 * parent + 1;
22
23 // right child
24 int64_t right = 2 * parent + 2;
25
26 // Compare left child with parent
27 if (left < n && arr[left] > arr[largest]) {
28 largest = left;
29 }
30 if (right < n && arr[right] > arr[largest]) {
31 largest = right;
32 }
33 if (largest != parent) {
34 std::swap(arr[parent], arr[largest]);
35
36 heapify_method(arr, n, largest);
37 }
38}
39
44template <typename T> void heap_sort(std::vector<T>& arr) {
45 int64_t n = arr.size();
46 // heapify the array at first
47 for (int64_t i = n / 2 - 1; i >= 0; i--) {
48 heapify_method(arr, n, i);
49 }
50 for (int64_t i = n - 1; i >= 0; i--) {
51 std::swap(arr[0], arr[i]);
52
53 heapify_method(arr, i, 0);
54 }
55}
56
57#endif