【发布时间】:2017-11-19 18:49:27
【问题描述】:
堆排序时间复杂度在所有情况下都是 nlog(n)。
但我不明白为什么,因为我们必须在具有“i”的子二叉树上调用 n 次 heapify 算法,这已经是 ilog(i) 复杂度。
【问题讨论】:
堆排序时间复杂度在所有情况下都是 nlog(n)。
但我不明白为什么,因为我们必须在具有“i”的子二叉树上调用 n 次 heapify 算法,这已经是 ilog(i) 复杂度。
【问题讨论】:
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))。
【讨论】: