堆排序是一種基于完全二叉樹(shù)的排序算法,其原理如下:
構(gòu)建最大堆或最小堆:首先將待排序的序列構(gòu)建成一個(gè)最大堆或最小堆。最大堆表示節(jié)點(diǎn)的值大于其子節(jié)點(diǎn)的值,最小堆表示節(jié)點(diǎn)的值小于其子節(jié)點(diǎn)的值。構(gòu)建堆的過(guò)程可以通過(guò)從最后一個(gè)非葉子節(jié)點(diǎn)開(kāi)始,依次向上調(diào)整來(lái)實(shí)現(xiàn)。
交換堆頂元素和末尾元素:將堆頂元素與最后一個(gè)元素交換位置,然后將堆的大小減一,相當(dāng)于將最大值或最小值移動(dòng)到數(shù)組的末尾。
調(diào)整堆:將剩余元素重新構(gòu)建成一個(gè)最大堆或最小堆,然后重復(fù)步驟2,直到堆的大小為1。
排序完成:當(dāng)堆的大小為1時(shí),所有元素都已經(jīng)排好序。
堆排序的時(shí)間復(fù)雜度為O(nlogn),是一種不穩(wěn)定的排序算法。