堆排序是一種基于完全二叉樹的排序算法,其原理如下:
構建最大堆或最小堆:首先將待排序的序列構建成一個最大堆或最小堆。最大堆表示節點的值大于其子節點的值,最小堆表示節點的值小于其子節點的值。構建堆的過程可以通過從最后一個非葉子節點開始,依次向上調整來實現。
交換堆頂元素和末尾元素:將堆頂元素與最后一個元素交換位置,然后將堆的大小減一,相當于將最大值或最小值移動到數組的末尾。
調整堆:將剩余元素重新構建成一個最大堆或最小堆,然后重復步驟2,直到堆的大小為1。
排序完成:當堆的大小為1時,所有元素都已經排好序。
堆排序的時間復雜度為O(nlogn),是一種不穩定的排序算法。