建堆:O(n) 循環
詢問:O(logn)im
建堆複雜度的證實:img
首先這個循環是從i = headsize/2 -> 1,也就是說這是一個bottom-up的建堆。因而,有1/2的元素向下比較了一次,有1/4的向下比較了兩次,1/8的,向下比較了3次,......,1/2^k的向下比較了k次,其中1/2^k <= 1, k 約等於lg(n)。因而就有總的比較量:di
T = () * ntime
令 S =
1/2 S =
S - 1/2S = 1/2S = 到這步就很明顯了吧,S <= 2因而T <= 2n => T = O(n).