【笔记】
当 MAX_HEAPIFY(A, i) 被调用时,我们假定LEFT(i)、RIGHT(i)为根的两棵二叉树都是最大堆。
若子结点中有最大元素,将 A[i] 与其交换,对该子树调用 MAX_HEAPIFY。若 A[ i ] 为最大元素,结束循环。
MAX_HEAPIFY 作用于一个高度为 h 的结点所需的运行时间为 O(h)。
void maxHeapify(int i) {
int l = left(i);
int r = right(i);
int largest = i;
if (l <= heapSize && A[l] > A[largest]) largest = l;
if (r <= heapSize && A[r] > A[largest]) largest = r;
if (largest != i) {
swap(A[i],A[largest]);
maxHeapify(largest);
}
}
【练习】
6.2-1 图示出MAX_HEAPIFY(A,3)作用于数组A=<27,17,3,16,13,10,1,5,7,12,4,8,9,0>的过程。