从下到上
1. 将期望结点插入到堆树的末尾,数组扩展一个位置。A[len] = 50<br>
2. 插入结点和其父结点比较,如果 比父结点大交互位置,否则不用变
len = 2*i + 1 <br>父结点位置pos = (len - 1) / 2<br>比较交换位置: A[pos] > A[len] ? 不动:交换位置<br>A[pos] = 50;<br>A[len] = 20;<br>len = pos;
3. 交换后再与交换后的父结点比较,直到不能交换为止。
继续与父节点比较<br>len = 2*i + 1<br>父结点位置pos = (len - 1) / 2<br>比较交换位置: A[pos] > A[len] ? 不动:交换位置<br>A[pos] = 50;<br>A[len] = 40;<br>len = pos;
从上到下
从上到下堆化过程与从下到上流程一致:<br>和当前结点的左右结点进行比较,如果比左右结点都大则不动。<br>否则和左右结点中较大的结点交换位置。<br>
i = 0;<br>A[i] > A[2*i+1]; false<br>A[i] > A[2*i + 2]; false<br>A[i] = A[2*i + 1] > A[2*i + 2] ? A[2*i + 1] : A[2*i + 2]<br>i = 2*i+2 = 2