在所有情况下,密码时间复杂度为nlog(n)。
但是我不明白为什么,因为我们必须在子二进制树上调用n次heapify算法,其中“i”已经是ilog(i)复杂性。
答案 0 :(得分:0)
heapify操作需要O(lg(n))
次。当您将最大/最小节点与堆底部的另一个节点交换时,您必须将该节点推回到底部。因为有n
个元素并且堆的高度等于lg(n)
,所以当您的节点遍历堆时,您将进行lg(n)
交换。如果您重复此n
次,则时间将为O(nlg(n))
。
在最坏的情况下(输入已排序,但顺序相反),构建堆和排序都将为O(nlg(n))
。在最好的情况下(排序的输入),建筑物将是O(n)
,并且如果输入包含相等的值,则排序将是O(nlg(n))
(O(n)
)。平均情况下,建筑物将处于最佳和最差情况之间,排序将为O(nlg(n))
。