堆排序算法详解
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
超级会员免费看
订阅专栏 解锁全文
1154

被折叠的 条评论
为什么被折叠?



