void adjust(int *heap, int n, int r)
{
int child, i, tmp;
tmp = heap[r];
for (i = r; i*2 <= n; i = child) {
child = i*2;
if ((child+1) <= n && heap[child+1] > heap[child]) {
child++;
}
if (heap[child] > tmp) {
printf("%d上移\n", heap[child]);
heap[i] = heap[child];
} else {
break;
}
}
heap[i] = tmp;
}
从节点 A[r] 开始调整,把大于 A[r] 的节点往上移动。