堆排序如何建堆 什么是堆排序?
什么是堆排序?快速排序和堆排序都不穩(wěn)定?不穩(wěn)定:兩個(gè)大小相同的數(shù)字,經(jīng)過(guò)排序,最終位置和初始位置交換??焖倥判颍?7 23 27 3以前27為軸心,然后27與后3交換形成3 23 27。排序結(jié)束一次,
什么是堆排序?
快速排序和堆排序都不穩(wěn)定?
不穩(wěn)定:兩個(gè)大小相同的數(shù)字,經(jīng)過(guò)排序,最終位置和初始位置交換。快速排序:27 23 27 3以前27為軸心,然后27與后3交換形成3 23 27。排序結(jié)束一次,但最后的27不穩(wěn)定,因?yàn)樗缬谂判蜷_(kāi)始處的初始位置3,即27。堆排序:例如:3 27 36 27,如果前3級(jí)先輸出,則第三級(jí)27(最后27級(jí))運(yùn)行到堆的頂部,然后堆穩(wěn)定并繼續(xù)輸出堆的頂部,即前27級(jí)。這說(shuō)明接下來(lái)的27個(gè)輸出先于第二個(gè)27個(gè),這是不穩(wěn)定的。
什么是堆排序?
第一種方法是假設(shè)堆是空的,然后依次附加每個(gè)元素,因?yàn)槎训奶砑邮窍蛏险{(diào)整的(不是排序,不能使用堆排序來(lái)實(shí)現(xiàn)堆排序)。這意味著每個(gè)非根元素依次向上調(diào)整。
第二種方法是按相反順序調(diào)整每個(gè)非葉元素。
復(fù)雜性是。。。嗯,我記錯(cuò)了。第二個(gè)是O(n),比第一個(gè)低。
這是建造反應(yīng)堆的過(guò)程。但是一旦有了堆,排序就容易多了。重復(fù)(1)堆頭和堆尾的交換,(2)移除尾部元素并將它們放在另一個(gè)地方,(3)向下調(diào)整堆頭,直到堆為空。