数据结构和算法的动态演示:https://visualgo.net/zh
heap.h:
#pragma once
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
template<typename T>
class Heap
{
vector<T> values;
int count;
void shiftUp(int k) //节点向上移动
{
while (k > 1 && values[k/2] < values[k])
{
swap(values[k], values[k / 2]);
k = k / 2;
}
}
void shiftDown() //节点向下移动
{
int k = 1;
while (k * 2 < count)
{
int j = 2 * k;
if (j + 1 < count && values[j + 1] > values[j]) //左右子节点比较
{
j++; //j为右子节点
}
if (values[k] >= values[j])
{
break;
}
swap(values[k], values[j]);
k = j;
}
}
public:
Heap()
{
values.resize(1); //下标从1开始
count = 0;
}
//返回二叉堆大小
int size()
{
return count;
}
//判断是否为空
bool empty()
{
return count <= 0;
}
//插入
void insert(T val)
{
values.push_back(val);
coun