前面一节我们学习了堆的实现—【零基础学会数据结构】—堆 接下来我们进行堆排序和topk问题的学习。
堆的向上调整法
堆的向上调整法可用于对堆结构的修复。 代码:
堆的向上调整法的局限性
堆的向下调整法
堆的向下调整法也是用于对堆结构的修复。 代码:
堆的向下调整法的局限性
堆的向下调整法也具有一定的局限性,大致和堆的向上调整法相似,不同的是堆的向下调整法的作用范围不好确定。
堆顶数据的删除
但是因为28与10交换了以后,堆的结构造成了破坏,所以最后还需要对28进行向下调整。
topk问题
topk问题的使用场景
网易云音乐的这种榜单就是类似topk问题,筛选出最近很多用户听的歌曲。或者类似美团的榜单这种都是topk问题。
topk问题的解决方法
topk问题有三种解决方法: 代码:
堆排序
方法: 假设要对一个数组进行升序操作: 主要有两个步骤: 1.建立一个大堆(可使用向上调整或者向下调整) 2.对堆里的数据进行调整。 我们先先学习第一步如何用向上调整或者向下调整进行建堆操作
向上调整建堆
向下调整建堆
在建完了堆以后,我们就可以开始堆排序的第二步操作了,对堆的元素进行调整。
堆排序代码
|