/*父子(至多)三者中的大者*/ Rank ProperParent(Rank n, Rank i) { if (rChildValid(n, i)) { return bigger(bigger(i, lChild(i)), rChild(i)); } else if (lChildValid(n, i)) { return bigger(i, lChild(i)); } else { return i; } }
void max_heapify(int array[], int length, int root) { int max, l, r; while(root <= length) { l = lChild(root); r = rChild(root); if(l <= length && array[root-1] < array[l-1]) max = l; else max = root; if(r <= length && array[max-1] < array[r-1]) max = r; if(root != max) { exchange(&array[root-1], &array[max-1]); root = max; } else break; } }
bool lChildValid(Rank n, Rank i) { return inHeap(n, lChild(i)); }