堆排序的运行时间,当所有元素都相同时

6

当数组A的所有元素都相同时,我们可以说堆排序的运行时间是O(n)。

--> 如果是这种情况,那么O(n)是否是堆排序的最佳情况运行时间?

1个回答

6
当所有元素相等时,构建堆需要O(n)步。因为当元素在一次比较后被添加到堆中时,我们可以看到它已经在正确的位置上。
移除根节点也是O(1)的,当我们交换尾部和根部时,堆的属性仍然得以满足。
所有元素都在O(n)的时间内被添加到堆中,并在O(n)的时间内被移除。所以,在这种情况下,堆排序的时间复杂度是O(n)。我想不出更好的情况,因此堆排序的最优时间复杂度必须是O(n)。
"堆排序的最优时间复杂度是O(n)"的意思是:存在大小为n的数组,使得堆排序最多只需要k*n次比较来进行排序。这在理论上很好,但实际上并不能说明堆排序有多好或多快。

这是不正确的!请参见https://dev59.com/G2455IYBdhLWcg3wAvRI - Cheng
@Cheng,这个问题是关于最佳情况的,你链接的问题是关于最坏情况的。正如我所指出的,最佳情况并不是真正相关的。如果你有任何改进我的答案的建议,请告诉我。 - Ishtar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接