时间复杂度堆排序算法

time complexity heapsort alogrithm

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

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

heapify 操作需要 O(lg(n)) 时间。当您将 max/min 节点与堆底部的另一个节点交换时,您将不得不将该节点推回到底部。因为有 n 个元素并且堆的高度等于 lg(n),所以当您的节点向下遍历堆时,您将进行 lg(n) 交换。如果重复 n 次,则时间为 O(nlg(n)).

在最坏的情况下(输入已排序,但顺序相反)构建堆和排序都将是 O(nlg(n))。在最好的情况下(排序的输入)构建将是 O(n),排序将是 O(nlg(n))(如果输入包含相等的值,则为 O(n))。在一般情况下,建筑将介于最佳和最差情况之间,排序将是 O(nlg(n)).