導航:首頁 > 源碼編譯 > 堆貨演算法

堆貨演算法

發布時間:2024-11-28 08:41:25

① 【跟著小蛋刷演算法】什麼是堆如何實現堆排序,滿滿的干貨來了

堆可以理解為特殊樹形結構,滿足兩個條件:完全二叉樹與值的比較規則(大頂堆或小頂堆)。完全二叉樹特點是除最後一層外,其他層節點滿載,最後一層靠左排列。大頂堆為每個節點大於或等於子節點,小頂堆為每個節點小於或等於子節點。以下圖示為堆的示例。

構建堆採用數組形式。每個節點存儲在數組的第二位置開始,定義節點在數組的位置為i,左子節點為2i,右子節點為2i+1。通過此規律可以推導出節點關系。接下來通過代碼實現堆的各種功能。

往堆中插入元素時,需滿足堆的特性。如果插入後不滿足,執行堆化操作,即新插入的節點與父節點比較,若不滿足子節點小於等於父節點則交換節點值,重復過程直到堆滿足特性。此過程如圖示。

刪除堆頂元素,即刪除堆中最大元素。將堆頂元素值與最後一個節點值互換,再執行堆化過程,直到堆滿足特性。圖示此過程。

堆排序利用堆進行排序。首先將序列構造成大頂堆,最大值在堆頂。接著交換堆頂元素與末尾元素,將剩餘元素重新構造成堆,得到次大值,反復執行得到有序序列。

實現堆排序的第一步是構建大頂堆,採用從上往下的堆化方式。假設待排序序列{0,7,5,19,8,4,1,20,13,16},堆元素從數組下標1開始,總共有9個元素。循環從9/2=4開始,直至1,因為這些節點有子節點。

排序過程是不斷將堆頂元素與末尾元素交換,將堆元素減1,然後重新堆化,重復直至完成排序。整個過程如圖所示。

堆排序時間復雜度包括構建堆與排序,構建堆為O(n),排序為O(nlogn),整體時間復雜度為O(nlogn)。

堆的概念、插入與刪除操作、堆排序與排序代碼詳解。總結堆知識點,堆排序流程,以及建堆和排序的代碼實現。

堆的知識點已大致講解,但演算法之路漫長,繼續堅持學習。關注小蛋,一起交流進步,更多的演算法干貨將不斷推出。

閱讀全文

與堆貨演算法相關的資料

熱點內容
考勤表加密怎麼辦 瀏覽:735
arj壓縮與解壓批處理怎麼寫 瀏覽:658
php和大數據哪個好 瀏覽:930
未來最值得投資的加密貨幣 瀏覽:526
ascii碼是編譯的時候用嗎 瀏覽:781
壓縮機感應包可以通用嗎 瀏覽:412
方舟伺服器怎麼發布到搜索列表 瀏覽:270
xml防反編譯 瀏覽:241
數據傳輸加密系統技術方案 瀏覽:842
程序員沒有準備去面試 瀏覽:4
51單片機usb滑鼠 瀏覽:881
qq伺服器的ip地址查詢 瀏覽:112
java仿qq聊天 瀏覽:401
解壓的ipa重新打包 瀏覽:144
程序員那麼可愛vip版 瀏覽:240
程序員怎麼升職 瀏覽:245
圖形化命令按鈕vb 瀏覽:987
vcu盤加密怎麼設置 瀏覽:415
如何加密備份微信聊天記錄 瀏覽:529
安卓手機如何模擬鍵盤 瀏覽:932