#ifndef HEAP_H__
#define HEAP_H__
#include <iostream>
#include <cassert>
#endif
template <class T>
class HEAP
{
public:
HEAP(T& array, int size);
HEAP() = default;
~HEAP() { delete Heap; };
void Init() const;
HEAP<T>& Push(const T& elem);
HEAP<T>& Pop(T& elem);
void Print() {
for(int i=1; i <= CurrentSize; i++)
std::cout << Heap[i] <<", ";
}
private:
int MaxSize = 1000, CurrentSize = 0;
T* Heap;
};
template <class T>
HEAP<T>::HEAP(T& array, int size) {
CurrentSize = size;
Heap = &array;
Heap --;
}
template <class T>
void HEAP<T>::Init() const {
assert(CurrentSize < MaxSize);
T temp;
int child;
for(int parent=CurrentSize/2; parent >= 1; parent--){
int nowindex = parent;
while(nowindex >= 1) {
child = 2*parent;
if(child <CurrentSize && Heap[child+1] < Heap[child])
child++;
if( Heap[child] < Heap[nowindex]) {
temp = Heap[child];
Heap[child] = Heap[nowindex];
Heap[nowindex] = temp;
}
else
break;
nowindex--;
}
}
}
int main(int argc, char const *argv[])
{
int a[] = {10,100, 9, 8, 7, 5, 6, 3, 2, 4, 1};
HEAP<int> heap(*a, 11);
heap.Print();
return 0;
}
小顶堆
最新推荐文章于 2025-04-12 23:44:50 发布