通过调整从节点⌊(n – 1) /2⌋开始的完整二叉树的每个内部节点的根,并调整到根节点,可以将大小为n的整数数组转换为堆(根节点在索引 0 处),顺序为 ⌊(n – 1)/2⌋, ⌊(n – 3)/ 2⌋, ….., 0。以这种方式构造堆所需的时间是
(A) O(log n)
(B) O(n)
(C) O (n log log n)
(D) O(n log n)答案:(乙)
说明:上面的语句实际上是构建输入数组A的Heap的算法。
BUILD-HEAP(A)
heapsize := size(A);
for i := floor(heapsize/2) downto 1
do HEAPIFY(A, i);
end for
END
上述算法的时间复杂度上限为 O(n)
见- https://www.geeksforgeeks.org/g-fact-85/
这个问题的测验