0
對於堆排序,如果我們想按升序對數組進行排序,那麼堆是否應該在最大堆或最小堆中轉換?堆排序,最小堆使用還是最大?
對於堆排序,如果我們想按升序對數組進行排序,那麼堆是否應該在最大堆或最小堆中轉換?堆排序,最小堆使用還是最大?
兩種方法都可以使用。通常,您將使用最大堆排序,以便最大的元素位於數組的最左側。這樣,當您從堆中出列元素並將其放入最終位置時,您可以將它們從數組的右側放置到左側(按降序排列),而不必跨越其他堆元素的頂部。
原則上你也可以在最右邊的位置創建一個最小元素的小堆,然後將小元素出列並將它們移動到最左邊,儘管我從來沒有見過這種情況。
我也看到了使用min-heap的代碼,向後退出,然後執行數組的後處理O(n)反轉。從來沒有明白爲什麼程序員這樣寫。一般來說,我已經看到了使用的最大堆。哦,我*已經*看到了「最後堆」的方法。再次,我不知道他爲什麼這樣做。 –
非常感謝@templatetypedef和@ jim-mischel! –