堆排序中建堆过程时间复杂度O(n)怎么来的?

时间:2023-03-09 15:50:47
堆排序中建堆过程时间复杂度O(n)怎么来的?

首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆。于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,......,1/2^k的向下比较了k次,其中1/2^k <= 1, k 约等于lg(n)。于是就有总的比较量:

T = (堆排序中建堆过程时间复杂度O(n)怎么来的?) * n

令 S = 堆排序中建堆过程时间复杂度O(n)怎么来的?

1/2 S = 堆排序中建堆过程时间复杂度O(n)怎么来的?
S - 1/2S = 1/2S = 堆排序中建堆过程时间复杂度O(n)怎么来的?
到这步就很明显了吧,S <= 2
于是T <= 2n => T = O(n).