插入:
对于一个大顶堆来说,插入到数组的最后一个节点然后和父节点比大小,如果节点比父节点大,则节点交换,直到父节点大于等于该节点或一直到根节点。时间复杂度O(LogN)。

删除:
把跟节点即下标为1的节点和最后一个节点交换,然后删除最后一个节点。然后一次拿根节点和其字节点比较直到满足要求为止。

堆化:
一个一个堆化:
先在数组中插入第一个元素,然后依次调用向堆中插入节点的操作。所以时间复杂度为log1+log2+…+logN = log(!N)近似等于NlogN,效率低下。
一次性堆化:
根据树的结构,我们可以找到最后一个含有子节点的父节点,然后用父节点和其字节点比较大小,不满足条件就交换节点位置,满足条件就遍历前面的父节点。因为最后一个父节点的坐标可以根据完全二叉树的特性得知为n/2,所以时间复杂度为O(N).

堆排序:
是一个持续删除堆顶然后堆化的过程,因为堆顶元素始终是最大的或最小的。每次删除一个元素就得堆化依次,一共要删除n个元素,所以时间复杂度为O(NlogN)。
因为每次删除都要交换节点(根节点和尾节点交换),可能会打乱两个值相同的先后顺序,所以是不稳定的排序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值