大小为n的整数数组可以通过调整从完整二进制树的每个内部节点(从节点⌊(n – 1)/2⌋)开始的堆的根,并进行直到根节点的调整,而转换为堆(根节点在索引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)答案: (B)
说明:上面的语句实际上是用于构建输入数组A的堆的算法。
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/
这个问题的测验