首先需要提前准备的知识
堆使用数组实现
节点当前索引index
节点和父节点的下标关系: index / 2
节点和左右自己点的下标关系:2*index + 1, 2*index + 2
实现如下:
#include <array>
// 堆实现
class MaxHeap
{
public:
MaxHeap()
{
nNum = 0;
}
~MaxHeap();
public:
// 从末尾插入
void Insert(int element)
{
if (nNum >= 100) return;
nNum++;
mHeap[nNum-1] = element;
// 上浮
int nCurIndex = nNum -1;
while(mHeap[nCurIndex/2] <= mHeap[nCurIndex])
{
std::swap(mHeap[nCurIndex/2], mHeap[nCurIndex]);
nCurIndex = nCurIndex/2;
if (nCurIndex == 0) break;
}
}
int GetMax()
{
if(nNum <= 0) return -1;
return mHeap[0];
}
private:
std::array<int, 100> mHeap;
int nNum;
};