這章節來介紹Heap Sort。
首先把array轉換成max-heap:

再來把max-heap最大的元素放到我們新建的output array:

拿掉後max-heap會進行sink的動作重組出剩下元素該有的max-heap,之後不斷循環這個步驟。

最後的output array就是結果:

總結一下剛剛的heap sort方法,在時間效率上很不錯,不過空間效率表現不出色,但也不會是很嚴重的問題:

有沒有可能改善空間效率呢?有的,就是直接使用原來的array進行heapify跟重組:

我們從最尾端開始進行sink,不斷進行就可以慢慢將整個array變成max-heap:




以上就完成了heapify。接下來sort的動作也不必創建新的output array來存!直接原地進行,因為sort好的元素就會被放在最旁邊,只要把剩下的元素在進行重新heapify就好了:



一樣的步驟省略,最後完成如下:

搞定!下面總結一下這個版本的heap sort,空間效率大幅提升!

Slides are from Josh Hug CS61B
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License