最小堆的插入删除函数
最小堆的插入删除函数
这里记录最小堆插入删除函数的写法。如果需要最大堆,只需要基本操作的反过来就可以了。
操作基本都有注释。结合注释理解。
Talk is cheap . Show me the code .
vector<int> minHeap;//需要设施哨兵,minHeap[0]=INT_MIN;
void insert(int x) {
minHeap.push_back(x);//将插入值放在堆底
int child=minHeap.size()-1;
while(minHeap[child/2]>minHeap[child]){//上滤操作,调整为最小堆
swap(minHeap[child/2],minHeap[child]);//上滤操作
child/=2;//完全二叉树在数组中表示的特点:child/2=parent
}
}
int Delete(){
int value=minHeap[1];//有哨兵,index为1的位置才是堆顶
swap(minHeap[1],minHeap[minHeap.size()-1]);//交换栈顶和底部元素
minHeap.pop_back();//将目标值弹出
int parent=1,child=0;
for(parent=1;parent*2<minHeap.size();parent=child){
child=parent*2;//完全二叉树在数组中表示的特点:child/2=parent
if(child!=minHeap.size()-1&&minHeap[child+1]<minHeap[child]) child++;
//判断有无右孩子,若有,是左孩子较小还是右孩子较小,再更新child的下标值
if(minHeap[parent]<minHeap[child]) break;//若符合堆的定义,弹出
else swap(minHeap[parent],minHeap[child]);//下滤操作
}
return value;//返回删除的元素值
}
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
· tomcat为什么假死了
· 聊一聊 Linux 上对函数进行 hook 的两种方式
· 编码之道,道心破碎。
· 知名开源项目Alist被收购!惹程序员众怒,开团炮轰甲方
· 千万级大表,如何做性能调优?
· 记一次 .NET 某发证机系统 崩溃分析
· 如何给 GitHub Copilot "洗脑”,让 AI 精准遵循指令产出高质量代码