2013-12-18 17 views

回答

0

以下是我對吧,我可能是不正確的,但在這裏不用。理論上講,它們同樣高效。

堆排序的工作原理基本上是將所有元素放入一個(最小)堆中,然後現在它們按堆順序重複刪除最小元素,直到堆爲空,以增加的順序給我們提供數據。它是O(nlogn),因爲我們對數據進行線性傳遞,並且堆支持對數據中每個元素所做的工作進行log n插入/刪除。

如果我們使用最大堆,我們會反覆調用getMax()。這會產生一個「遞減順序」,但您可以輕鬆地將這些最大值從右到左插入到最終數組中以獲得遞增順序。

+0

我認爲它恰恰相反......它實際上把它們放到了最大堆中。在每次迭代中,算法刪除根並將其放在數組的末尾,然後調用heapify來替換根中的最大數字:P – Riptyde4

+0

噢。我的錯。無論如何,它似乎仍然是可以互換的!在學校裏,我被教導說它使用了最小的堆! –

+0

它不稱爲heapify ***它調用過濾從n/2下降到索引2.哈哈我只是讀它關於它在我的書中說的就在這裏......同樣的事情本質上 – Riptyde4

相關問題