堆排序图文详解

堆排序是一种基于完全二叉树结构的排序算法,包括建立大根堆和堆调整两个过程。在大根堆的建立中,通过比较节点与根节点交换确保堆顶元素最大,然后与末尾元素交换。堆调整则从根节点开始,比较并交换子节点中较大者,直到达到有序状态。给出的Java代码展示了这一过程。
摘要由CSDN通过智能技术生成

 

基础知识
堆结构是完全二叉树的结构,即从根节点到倒数最二层满足每个根节点都有两个子节点,最后一层可以不完全填充,但是叶子节点必须靠左对齐。在程序中是用数组来表示一个堆,若根节点在数组中的下标为index,则满足以下关系:
左子节点的下标left = 2*index+1,右子节点下标right = 2*index+2;

若当前节点的下标为index,则其父节点的下标为(index-1)/2。

算法整体思路
堆排序(从小到大)主要分为两个部分,建立大根堆和堆调整。建立大根堆即保证堆顶元素为最大值,将堆顶元素(在数组中下标为0)与末尾元素(在数组中下标为len-1)交换,这样数组末尾的元素即为最大值。但此时受到交换的影响,堆顶元素不是最大值,再通过堆调整将剩下的元素调整为大根堆,再将其与数组倒数第二位元素交换。。。以此类推,直到整个数组有序。

建立大根堆步骤
1、对于堆中每个节点,将其与当前根节点比较,若比当前根节点大,则交换

2、将当前根节点作为当前节点,与上层根节点继续上述比较,直到与整个堆的根节点比完为止

3、以数组【2 1 4 0 8 10 3】为例,建立大根堆的步骤如下图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值