【数据结构与算法】堆顶删除

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

一.堆顶出列的原理

还记得我们刚开始说的嘛,如果我想要拿出最大的,那么下一个最大的会花落谁家.
那么就需要用到堆顶出列的原理了.

在这里插入图片描述
然后我们再对顶节点,进行向下调整就可以了.

二.堆顶出列的实现

1.覆盖最大元素并出列

在这里插入图片描述
先将顶节点拿出,然后用最后一个元素来赋值,再对整个长度减1,那么现在最大节点(堆顶)就出列了.

2.向下调整成为堆

出列后的数组,肯定不是一个最大堆,因为最后一个值上来了,我们需要进行调整,因为其他地方都没有变,只有我们的堆顶变了,所以我们只需要考虑堆顶向下调整,也就是下标为1的地方.
在这里插入图片描述

三.堆排序

最大堆每次都是最大的元素出列,那么就形成了一种排序的效果.

在这里插入图片描述
这是一种复杂度为log n的方法,效率很高.
同时,这种比较如果用在优先级里面,效率也很高,那么优先级队列用堆来实现也不错.

四,总结

删除堆的操作可以分为两个步骤:删除根节点和调整堆。

1.删除根节点:

  • 将根节点与最后一个节点进行交换;
  • 删除最后一个节点;
  • 更新堆的大小。

2.调整堆:

  • 从根节点开始,与其子节点比较,找到较大(小)的子节点;
  • 如果根节点小于(大于)子节点,则交换两者的值;
  • 重复上述步骤,直到节点没有子节点或满足堆的性质。

删除堆的操作时间复杂度为O(log n),其中n是堆的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值