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

avatar
作者
猴君
阅读量:0

堆顶的删除

一.堆顶出列的原理

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

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

二.堆顶出列的实现

1.覆盖最大元素并出列

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

2.向下调整成为堆

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

三.堆排序

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

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

四,总结

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

1.删除根节点:

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

2.调整堆:

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

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!