堆
来源:互联网 发布:演艺行业的二手数据库 编辑:程序博客网 时间:2024/06/08 18:41
堆是一个完全二叉树,可以由一维数组来实现。堆中数据是局部有序的。
堆分为两种:最大值堆和最小值堆。
堆的两个基本操作:
1)堆的最高优先级元素的删除:1.直接删除根 2.用最后一个元素来代替根 3.将堆从根开始向下调整
2)元素插入:1.在数组的最后插入一个元素 2.从末尾开始向上调整
模板(以最小堆为例):
//堆的向下调整void Down(int father){ int son=father*2; while(son<=hlength) { if(son<hlength&&heap[son]>heap[son+1]) //选择两个子节点中较小的元素,用来和父节点进行比较 son++; if(heap[father]<=heap[son]) //如果父节点不大于子节点中小的那个,说明调整已经满足最小堆的条件 { return; } else //否则,要将父子节点进行交换,然后再调整子节点 { swap(heap[father],heap[son]); father=son; son=father*2; } }}//删除优先级最高的节点int DeleteMin(){ int data=heap[1]; heap[1]=heap[hlength--]; Down(1); return data;}//堆的向上个更新void Up(int son){ int father=son/2; while(father>=1&&heap[father]>heap[son]) //只需要将该节点与父节点继续拧比较 { swap(heap[father],heap[son]); //不符合情况则交换节点,然后再更新父节点 son=father; father=son/2; }}//插入元素void Insert(int data){ heap[++hlength]=data; Up(hlength);}//进行所有元素的调整,即建立堆void Build(){ for(int i=hlength/2;i>=1;i--) { Down(i); }}
0 0
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 堆
- 海量数据的查询优化及分页算法方案
- Linux那些事儿之我是Sysfs(8)一起散散步-pathwalk
- CoreAnimation的学习备忘录
- 开源日志库<log4cplus+VS2008使用>整理
- VS2010 常见错误
- 堆
- Hibernate和Ibatis的区别
- 常用的SQL命令
- iGrimace Cydia使用
- 2015(第四届)中国信息化和工业化融合发展高峰论坛第二天-黄培博士讲座课件
- uitableView实现多选
- C++ function、bind以及lamda表达式
- 移动H5前端性能优化指南
- 三层架构的电力系统