堆積排序法(Heap Sort)是一種選擇排序的算法,它使用二叉堆進行排序。二叉堆可以分為最大堆和最小堆,這裡我們使用最大堆來對整數陣列進行由小到大的排序。最大堆的性質是每個節點的值都大於或等於其子節點的值。堆積排序的過程可以分為兩大步驟:建立最大堆和堆排序。
給定的整數陣列為:{19, 37, 28, 99, 72, 6, 55}
步驟一:建立最大堆
從最後一個非葉子節點開始(陣列中的第一半元素),對每個節點進行下沉操作,確保子樹都是最大堆。
以給定的陣列為例,我們將其視為一個完全二叉樹。最後一個非葉子節點是72(索引為4/2-1=1),從這個節點開始進行下沉。
初始陣列:{19, 37, 28, 99, 72, 6, 55}
進行下沉調整後(從最後一個非葉子節點開始調整):
調整後:{19, 72, 28, 99, 37, 6, 55} (72和37交換位置)
繼續調整:{99, 72, 28, 19, 37, 6, 55} (99上浮到根節點)
步驟二:堆排序
交換堆頂元素與最後一個元素,將最大元素"固定"在終端。
調整剩餘的n-1個元素,使其滿足最大堆的性質,再次交換堆頂元素與當前最後一個元素,重複此過程直到排序完成。
第一次交換後:{55, 72, 28, 19, 37, 6, 99}
調整後:{72, 37, 28, 19, 55, 6, | 99}
第二次交換後:{6, 37, 28, 19, 55, 72, | 99}
調整後:{55, 37, 28, 19, 6, | 72, 99}
重複這個過程...
由於具體的步驟會根據二叉堆的調整過程而變化,上述示例展示了堆積排序的基本思想。實際操作中,每次"下沉"操作可能會導致不同的中間狀態。最終的目標是通過建立最大堆和逐步交換堆頂元素到陣列末尾的方式,實現整個陣列的排序。這裡僅為說明目的,可能未能精確展示每一步的詳細調整過程。