24、堆排序算法详解

堆排序算法详解

1. 堆的基本概念

在堆这种数据结构中,我们可以根据父节点的索引计算出其子节点的索引。具体公式如下:
- 左子节点索引: leftChildIndex = 2 * parentIndex + 1
- 右子节点索引: rightChildIndex = 2 * parentIndex + 2

例如,对于根节点(索引为 0),其左子节点索引为 1,右子节点索引为 2。当然,并非每个节点都有子节点,如果计算出的子节点索引大于或等于堆中元素的数量,那么该节点就是叶子节点。

反过来,我们也可以根据子节点的索引计算出其父节点的索引,公式为: parentIndex = (childIndex - 1) // 2 ,这里的 // 表示整数除法。需要注意的是,根节点(索引为 0)没有父节点,其他节点都有父节点。

2. 构建堆

我们可以构建最大堆(即堆顶元素为最大值)。为了实现这一目标,我们需要一个 Heap 类来封装构建堆所需的数据和方法。 Heap 对象包含一个列表和当前堆中元素的数量(我们称之为堆的大小)。

2.1 buildFrom 方法
def buildFrom(self, aSequence):
    '''aSequence is an instance of a sequence coll
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值