Sift-up
输入: 数组H[1...n]和位于1和n之间的索引i
输出:上移H[i](如果需要),以使它不大于父节点
步骤:
1比较H[i]和它的父亲结点的大小,如果大于父亲结点,则与父亲结点交换。
2交换后再和新的父亲比较,重复上述操作,直至该点的值小于父亲。
时间复杂度分析
每处理H[i]时,最多需要向根部方向交换 logn次。
因此总的时间复杂度是 O(logn)
Sifi-down
输入: 数组H[1...n]和位于1和n之间的索引i
输出 :下移H[i](如果需要),以使它不小于子节点
步骤:
1比较H[i]和与其两个儿子中较小的一个比较,若小于儿子,则与儿子交换。
2交换后再与新的儿子比较并交换,直至没有儿子。
3再选择较浅深度的父亲结点,重复上述步骤。
时间复杂度分析
每处理H[i]时,最多需要向根部方向交换 logn次。
因此总的时间复杂度是 O(logn)