算法学习(三)堆排序

要弄清楚堆排序,我们首先要懂得以下两点:1)逻辑上的结构,怎么样才是一个堆。2)存储上的结构,一个堆存储起来的结构是怎么样的。一般来讲,堆排序中的“堆”指的是二叉堆,一种完全二叉树的结构,每个父结点最多只有两个子结点,且满足两点:1)父结点总是大于(小于)其两个子结点(大于的,我们叫最大堆,小于的,我们叫最小堆)。2)父结点的左右子树也都满足上面1)的规则,也就是说其左右子树也是一个最大堆或者是最小堆。。。。1)从第一个非叶子结点开始,也即是7开始,我们比较它跟其左右子结点的值,将三者中最大的
摘要由CSDN通过智能技术生成

要弄清楚堆排序,我们首先要懂得以下两点:

1)逻辑上的结构,怎么样才是一个堆。

2)存储上的结构,一个堆存储起来的结构是怎么样的。

一般来讲,堆排序中的“堆”指的是二叉堆,一种完全二叉树的结构,每个父结点最多只有两个子结点,且满足两点:

1)父结点总是大于(小于)其两个子结点(大于的,我们叫最大堆,小于的,我们叫最小堆)。

2)父结点的左右子树也都满足上面1)的规则,也就是说其左右子树也是一个最大堆或者是最小堆。

树结构,我们可以看下图:


一般来说,算法中提到的堆结构都是用数组来存储的,所以上面的这个二叉树放在数组中就是


从上面我们可以看到,按顺序从上到下,从左到右存储,比如“1”存在a[0],则其左子结点则存在a[2*0 + 1]=a[1]的位置上,其右子结点则存在a[2*0 + 2] = a[2]的位置上,而"2"的左结点是4,是存在a[2*1+1] = a[3]的位置上,其右结点5,则是在跟着的位置上,所以我们可以发现如果父结点的位置是i,则其左右子结点的位置分别2*i + 1 和 2*i + 2ÿ

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值