图解算法:堆、堆排序、优先队列

目录

堆的概念和性质:

堆:

完全二叉树:

图解用数组表示堆: 

图解最小堆节点插入(堆的构造过程):

图解节点移除:

完整代码:


堆、堆排序、优先队列可以看成就是一个东西;堆是一种非常重要的数据结构,堆排序是基于堆这种数据结构实现的;优先队列可以用堆这种数据结构来实现,也可以用其他数据结构实现。

优先队列可以用来实现有优先级的任务调用(一些任务在池子里等待,优先级最高的先被优先取出执行)

堆的概念和性质:

堆:

堆是一棵完全二叉树,满足以下性质:

最大堆(Max Heap):
在最大堆中,父节点的值总是大于或等于其子节点的值。
因此,最大堆的根节点是堆中的最大值。

最小堆(Min Heap):
在最小堆中,父节点的值总是小于或等于其子节点的值。
因此,最小堆的根节点是堆中的最小值。

完全二叉树:

除了最底层外,其他每一层的节点都被填满,且最底层从左到右填充。这种结构使得堆可以通过数组高效地实现。对于父节点索引为i的节点,其左子节点的索引为2i+1,右子节点的索引为2i+2。同样地,对于子节点索引为j的节点,其父节点的索引为(j-1)/2。

left 2*i+1 
right 2*i+2
parent (i-1)/2  

图解用数组表示堆: 

上图中从根节点开始一层一层从左到有遍历(广度优先),就得到0到14 的有序数组 , 父节点、左右子节点满足表格中的计算关系。

图解最小堆节点插入(堆的构造过程):

1.将新元素直接插入到树的最底层最后一个位置(也就是数组的最后一个位置)
2.检查是否满足最小堆的性质:父节点的值总是小于或等于其子节点的值
3.如下图依次插入4到55,发现都满足最小堆的性质。

4.继续插入6,不满足最小堆的性质,6和父节点50互换。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值