美文网首页
2021-06-26堆

2021-06-26堆

作者: 竹blue | 来源:发表于2021-06-28 11:00 被阅读0次

概念

  1. 一个完全二叉树
  2. 每个节点的值都必须大于等于[大顶堆](或小于等于[小顶堆])其子树中每个节点的值。
  3. 说明:堆其实就是一种完全二叉树,最常用的存储方式就是数组。[说明:堆中序遍历就是有序的数组]

存储

数组

操作

插入一个元素和删除堆顶元素

堆排序

  1. 借助堆实现的排序算法。
  2. 时间复杂度非常稳定,是O(n*logn)。
  3. 是原地排序算法。

如何基于堆去实现排序?

第一步 建堆

  • 思路1:从前往后处理数组数据,并且每个数据插入堆中时,都从下往上堆化。

  • 思路2:从后往前处理数组,并且每个数据都是从上往下堆化。

    //小顶堆
    PriorityQueue<Integer> small = new PriorityQueue<>();
    //大顶堆
    PriorityQueue<Integer> big = new PriorityQueue<>((x, y) -> (y - x));
    

第二步 排序

  1. 堆顶跟最后一个元素交换,把下标为n的元素放到堆顶,通过堆化的方法,将剩下的n-1个元素重新构建成堆。
  2. 堆化完成之后,取堆顶元素,放到下标是n-1的位置。
  3. 一直重复这个过程,直到最后堆中只剩下标为1的一个元素,排序工作就完成了。

为什么快排比堆排序性能好?

  1. 堆排序数据访问的方式没有快排友好
  2. 同样的数据,在排序过程中,堆排序算法的数据交换次数多于快速排序。

应用

  1. 优先级队列
  2. 针对静态/动态数据集合求Top K
  3. 求动态数据集合中的中位数

相关文章

  • 2021-06-26堆

    概念 一个完全二叉树。每个节点的值都必须大于等于[大顶堆](或小于等于[小顶堆])其子树中每个节点的值。说明:堆其...

  • KVO与KVC

    一、KVO截屏2021-06-26 下午2.06.12.png MJPerson有个属性age,这里对age进行K...

  • 基因组Survey(二代测序数据质控)

    2021-06-26 一. 为什么要做基因组Survey? Survey分析要做什么数据准备?(1)QC方法介绍(...

  • 谨记--周年

    2021-06-26[毕业周年] 又是今日   时间的标记,6月26日。  今年的简书,一如既往,记录这日子。  ...

  • 这样挺好

    2021-06-26 阴有阵雨 周六 “宝贝,大胆地游,不怕的,有爸爸在旁边保护着你!”宝贝六岁...

  • 模拟游戏环境与通用人工智能体演化的随想

    模拟游戏环境与通用人工智能体演化的随想 于 2021-06-26 于岳麓山下桃子湖畔,最早发布于QQ空间之日志。 ...

  • 人与人之间,也需要平衡

    日记849篇 2021-06-26 跷跷板,两边一样重,才能平衡。 管理者和员工之间,没有了平衡,员工会离职; 购...

  • #Dairy233 放纵

    2021-06-26 晴 周五 不小心睡到了十一点才起,结果还比DJ早起了。 没有继续写报告,队友因为打了疫苗人不...

  • #Dairy234 ?

    2021-06-26 周六 晴 出了趟门,去了超市采购一周的事物。 没有干什么正事,连看了四五集致命女人第二季。 ...

  • 【餐饮100问】27.为什么一干就废?

    Day238 2021-06-26 明明懂得了很多的道理,却依然过不好这一生。总是在学习的时候,一听就会,一干就废...

网友评论

      本文标题:2021-06-26堆

      本文链接:https://www.haomeiwen.com/subject/jnuzyltx.html