数据结构堆Heap实现思路

参见《算法笔记》–胡凡

一、了解堆

介绍
数组存放

注意: 这里面说根节点不能存在0位置,应该是想说当子节点满足2x和2x+1这种规律时;而不是说不能,如果是0的话,规律变为2x+1和2x+2了。
修订:根节点确实不适合用0,例如当你在进行添加操作时,你添加后需要向上调整,此时需要判断是否为奇偶数才能获得父节点的下标,奇数除以2,而偶数需要除以2再减一。但对于根节点为1的,无论奇偶,只需要除以2即可。

实现思路

核心思想:编写调整函数,调整函数有两个方向,从上往下(用于构建堆,排序,删除节点)或者从下往上(用于添加节点)。大体举例如下

…以此类推

二、实现堆(大顶堆为例,即书中所说)

向下调整函数
构建和删除操作
向上调整函数和添加操作
实现堆排序

三、PriorityQueue

优先队列,Java中集合,默认实现小顶堆,我们只需要通过add添加元素,即可获得小顶堆。每次poll相当于移除堆顶元素,即最小值。如果看源码的话,就知道里面的核心同样是调整函数,如shiftDown,shiftUp等,它们在操作堆时同样会被调用。

四、练习

排序题目汇总 215、347、451

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值