2021-07-09堆排序算法思想

堆排补充(是特殊的快排)
。。。解释不清了,对照着堆排初了解的凑合看吧

  1. 算法思想
    了解一波后明白堆排说到底就是两个步骤建堆和整堆的过程了,然后我们来一步步摸清楚。
    建堆要大顶堆还是小顶堆呀?我们要明白为什么说大顶堆就是用于递增排序,小顶堆就是降序呢?——这是由于大顶堆排列时将max值排到了树顶点位置,与当前堆最后一个数交换后,max值被排在数组最后一个位置了,从右往左时依次变小的数。
    这里讲的堆、完全二叉树数据结构并不真实存在,只是一个帮助我们排序的思考形式,不占用真实内存。依旧是一个待排序的数组序列。
    对于在数组中,已知某个元素i的数组下标,那我可以找到它的父节点、左右孩子结点,(i-1)/2的上下取值、2i+1、2i+2.
    将待排序序列画成完全二叉树的形式是一个初始堆,但还未完成。这里从堆的最后一个结点开始
    做比较 交换(为什么是最后一个结点?因为其实应该从最后一个数开始的,但因为最后一层的点只能和自己比较,没意思,我就不代入了)就这个最后一个结点开始,从右往左,自下而上逐个排查。每一个结点要和它的左右孩子比较,比较后需要交换的就换位置。到了再上一层除了要和孩子结点比较交换,还会出现一个问题就是,会影响这个树了下一层顺序,所以是个下沉的排查。这里分析规律
    如图:
    知道每一层的数量变化后呢?怎么联系到总消耗时间?

  2. 例子

  3. 时间复杂度
    分析:

  4. java代码

在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值