數(shù)據(jù)結(jié)構(gòu)堆排序過程 什么是堆排序呢,其時間復(fù)雜度是怎么計算的呢?
什么是堆排序呢,其時間復(fù)雜度是怎么計算的呢?堆排序是利用堆數(shù)據(jù)結(jié)構(gòu)設(shè)計的一種排序算法。Heap是一種幾乎完全的二叉樹結(jié)構(gòu),它滿足Heap的性質(zhì):子節(jié)點的鍵值或索引總是小于(或大于)父節(jié)點。堆排序的平均
什么是堆排序呢,其時間復(fù)雜度是怎么計算的呢?
堆排序是利用堆數(shù)據(jù)結(jié)構(gòu)設(shè)計的一種排序算法。Heap是一種幾乎完全的二叉樹結(jié)構(gòu),它滿足Heap的性質(zhì):子節(jié)點的鍵值或索引總是小于(或大于)父節(jié)點。
堆排序的平均時間復(fù)雜度為O(nlogn),空間復(fù)雜度為θ(1)。
堆排序的堆是怎么建立的?
第一種方法是假設(shè)堆是空的,然后依次附加每個元素,因為堆的添加是向上調(diào)整的(不是排序,不能使用堆排序來實現(xiàn)堆排序)。這意味著每個非根元素依次向上調(diào)整。
第二種方法是按相反順序調(diào)整每個非葉元素。
復(fù)雜性是。。。嗯,我記錯了。第二個是O(n),比第一個低。
這是建造反應(yīng)堆的過程。但是一旦有了堆,排序就容易多了。重復(fù)(1)堆頭和堆尾的交換,(2)移除尾部元素并將它們放在另一個地方,(3)向下調(diào)整堆頭,直到堆為空。