36 void heapifyUp(
size_t index)
40 size_t parent = (index - 1) / 2;
41 if ((isMinHeap && data[index] < data[parent]) || (!isMinHeap && data[index] > data[parent]))
43 swap(data[index], data[parent]);
52 void heapifyDown(
size_t index)
56 size_t left = 2 * index + 1;
57 size_t right = 2 * index + 2;
58 size_t target = index;
60 if (left < size && ((isMinHeap && data[left] < data[target]) || (!isMinHeap && data[left] > data[target])))
63 if (right < size && ((isMinHeap && data[right] < data[target]) || (!isMinHeap && data[right] > data[target])))
68 swap(data[index], data[target]);
87 T* newData =
new T[capacity];
88 for (
size_t i = 0; i < size; ++i)
95 Heap(
size_t initCapacity = 16) : size(0), capacity(initCapacity)
97 data =
new T[capacity];
108 if (size == capacity)
119 throw "Heap is empty";
122 data[0] = data[--size];
131 throw "Heap is empty";