堆
堆虽然是一个树形结构,其实是用数组来实现的
Heapify() :堆的维护
每次将堆顶的数放与未排序数组的最后一个进行交换,然后再逐层将儿子中大(小)的一个往上移,或者不移动。(注意:这样的操作依然保证了堆结构,依然只有最下一层的叶子结点是没有满的)
最坏情况:T(n)<=T(2n/3)+O(1)
因为每次交换i,l,r的复杂度只为O(1),且子树的最多结点不超过整颗树的2/3。所以由住定理。上述递归式的解T(n)=O(lgn)
Buildhead()建堆
建堆最紧的时间复杂度可以更新到线性级别(公式A.8就是等差×等比的求和)。