雖然我在閱讀「算法導論」,但我想知道爲什麼HEAPSORT
需要時間O(nlgn),而BUILD-MAX-HEAP
需要時間O(n)。爲什麼BUILD-MAX-HEAP花費O(nlgn)時間O(n)而HEAP-SORT花費O(nlgn)時間?
HEAPSORT
從A.length downto 2開始循環,調用MAX-HEAPIFY
。
BUILD-MAX-HEAP
在A.length/2 downto 1的底部開始循環,調用MAX-HEAPIFY
。
MAX-HEAPIFY
需要時間O(lgn)。我想知道是什麼導致BUILD-MAX-HEAP
比HEAPSORT
更快。
請參閱[Wikipedia](https://en.wikipedia.org/wiki/Binary_heap#Building_a_heap)瞭解爲什麼heapifying是O(n)的證明。 –
heapsort基本上以MAX-HEAPIFY開頭(儘管它可能會稍微有點不同),然而,heapsort然後繼續*從堆中移除每個元素*。正是這個額外的步驟使它成爲O(n log n)而不僅僅是O(n)。 – harold