【问题标题】:time complexity heapsort alogrithm时间复杂度堆排序算法
【发布时间】:2017-11-19 18:49:27
【问题描述】:

堆排序时间复杂度在所有情况下都是 nlog(n)。

但我不明白为什么,因为我们必须在具有“i”的子二叉树上调用 n 次 heapify 算法,这已经是 ilog(i) 复杂度。

【问题讨论】:

    标签: time-complexity heapsort


    【解决方案1】:

    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))

    【讨论】:

    • 我认为二叉树是这样的,每个父母最多有 2 个孩子。
    • @RonanTarikDrevon 对不起,我看错了你的问题。我以为你的意思是二叉搜索树。在二叉树中,每个键最多有 2 个孩子,这是二叉树的唯一属性。