堆排序(用手机写博客的小武)

大顶堆和小顶堆

大顶堆就是节点比左右孩子都大构建的完全二叉树

小顶堆是节点比左右孩子都小构建的完全二叉树

使其存放到数组中,各个节点的下标的计算与完全二叉树中左右孩子与父节点的计算关系一样,依次递推根节点的下标一定是0,从而回溯得到各个节点的下标。

 

da3d6488b3cd4c1498dd19659c742378.jpg

 

其次就是维护大顶堆的性质,使每一个非叶子结点,使其左右孩子都小于他,也就是比较和交换操作使这三个最大的当父节点,时间复杂度为logn

第一个步骤就是建堆,通过节点个数与第一个非叶子结点的关系,2n-1得第一个非叶子结点,依次递减,每一个阶段都符合堆性质,在舰队不对过程中,如果出现不了不符合性质的节点,那么可能会改变之前已经建好的树 ,这样需要递归进行检查是否符合性质。

第二步骤,进行排序,这时得到第一个最大值拿出来,与最后一个位置的元素交换位置,再update堆,得到第二个最大值与堆中的最后一个位置交换位置,依次这样,可以用循环加递归进行操作。

来个怪图(我菜呜呜呜!)

ede45da8327e4a64970d286470642c69.jpg

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值