《算法》-排序[優(yōu)先隊(duì)列(堆排序)]

優(yōu)先隊(duì)列(堆排序)

優(yōu)先隊(duì)列:最重要的操作就是刪除最大元素和插入元素

堆排序:堆排序?qū)τ谟涗涊^少的文件效果一般,對于文件較多還是比較有效的,最差的時(shí)間復(fù)雜度為nlog(n),屬于不穩(wěn)定排序

堆排序可以被認(rèn)為是一種改進(jìn)的選擇排序:就像選擇算法一樣,它將輸入分成已排序的和還未排序的區(qū)域,它通過提取未排序的區(qū)域內(nèi)最大的元素并將其移動(dòng)到已排序的區(qū)域來迭代縮小未排序的區(qū)域。堆排序相對選擇排序改進(jìn)的部分包括使用堆數(shù)據(jù)結(jié)構(gòu)而不是線性時(shí)間的搜索來找到最大值。摘于知乎:堆排序

步驟:

輸入:一系列的無序元素(比如說,數(shù)字)組成的輸入數(shù)組A

經(jīng)過:堆排序的過程可以具體分為三步,創(chuàng)建堆,調(diào)整堆,堆排序。

創(chuàng)建堆,以數(shù)組的形式將堆中所有的數(shù)據(jù)重新排序,使其成為最大堆/最小堆。

調(diào)整堆,調(diào)整過程需要保證堆序性質(zhì):在一個(gè)二叉堆中任意父節(jié)點(diǎn)大于其子節(jié)點(diǎn)。

堆排序,取出位于堆頂?shù)牡谝粋€(gè)數(shù)據(jù)(最大堆則為最大數(shù),最小堆則為最小數(shù)),放入輸出數(shù)組B 中,再將剩下的對作調(diào)整堆的迭代/重復(fù)運(yùn)算直至輸入數(shù)組 A中只剩下最后一個(gè)元素。

輸出:輸出數(shù)組B,里面包含的元素都是A 中的但是已經(jīng)按照要求排好了順序


# python中heapq堆使用

importheapq

list = [1,2,3,5,1,5,8,9,6]

heapq.heapify(list)

代碼參考:

簡書-堆排序

公眾號(hào):算法手記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容