时间复杂度堆排序算法
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))
.
堆排序的时间复杂度在所有情况下都是 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))
.