一、基本概念
堆:近似的完全二叉树(用数组A[1...n]存储),除了最底层以外,该树是完全充满的,而且是从左向右填充。在数组A中,A.length=n表示数组元素个数,A.heap-size表示A中堆元素的个数。
基本操作:(下标为i的元素寻找父结点及其左右孩子结点)
二、维护堆的性质
MAX-HEAPIFY是用于维护最大堆性质的重要过程。输入数组A和一个下标i。在调用该函数时,假定根节点i的左子树和右子树均为最大堆。A[i]可能小于其孩子,于是通过将A[i]在堆中逐级下降(该操作也被称为下滤)来使得以A[i]为根的树也满足最大堆性质。
解释:1-7行选出A[i],A[LEFT(i)]和A[RIGHT(i)]中最大的,将其下标存在变量largest中。A[i]最大则已满足最大堆。否则,将其值与孩子结点中最大的交换,此时以这个孩子结点为根的树又可能违反最大堆性质,递归调用MAX-HEAPIFY,直到叶子结点。
举例MAX-HEAPIFY(A,2):
时间复杂度:或(h为当前结点高度)。
复杂度分析:最坏情况需要递归调用MAX-HEAPIFY直到叶子结点ÿ