2017-07-20 104 views

回答

3

兩種方法都可以使用。通常,您將使用最大堆排序,以便最大的元素位於數組的最左側。這樣,當您從堆中出列元素並將其放入最終位置時,您可以將它們從數組的右側放置到左側(按降序排列),而不必跨越其他堆元素的頂部。

原則上你也可以在最右邊的位置創建一個最小元素的小堆,然後將小元素出列並將它們移動到最左邊,儘管我從來沒有見過這種情況。

+1

我也看到了使用min-heap的代碼,向後退出,然後執行數組的後處理O(n)反轉。從來沒有明白爲什麼程序員這樣寫。一般來說,我已經看到了使用的最大堆。哦,我*已經*看到了「最後堆」的方法。再次,我不知道他爲什麼這樣做。 –

+0

非常感謝@templatetypedef和@ jim-mischel! –