当输入已经反向排序时,堆排序的运行时间是多少。
有人可以解释一下吗?我很困惑..
答案 0 :(得分:3)
它将是O(n log n),因为即使堆将以线性时间建立,即O(n),在每次迭代(总共n-1次迭代)中,max元素将被移除并且max-heapify将被调用,然后将遍历树的底部并将花费O(log n)时间。
因此运行时间为O(n log n)
答案 1 :(得分:0)
我假设通过逆序排序--- U想要表示(1)当我们使用max-heapify时,输入以升序排列& (2)当我们使用min-heapify时,输入按降序给出。对?我拿第一个进行分析。
给定输入按升序排列的最大堆属性:(参见Cormen for HeapSort算法)
Build-Max-Heap:更精确地使用Big-Omeag(n)。通常在任何给定输入上都需要O(n)。但这并不矛盾,因为这个输入导致Build-Max-Heap算法至少采用Big-Omega(n)...(见Cormen第3章:Sec-Omega表示法)。
algo的2-5行将采用Big-Theta(n log n)。
因此T(n)= Big-Omega(n)+ Big-Theta(n log n)
因此,T(n)= Big-Omega(n log n)。