很早就學習了堆排序但當時沒有用代碼實現,現在再去想實現已經忘光光啦┑( ̄Д  ̄)┍,於是就去網上搜了一番,發現沒有一篇我能認真看完的文章,沒辦法就是沒耐心,就是笨唄。。。好了,言歸正傳= ̄ω ̄=
瞭解概念
首先明白什麼是堆,什麼是完全二叉樹,什麼是大頂堆,相信很容易理解。
堆可以用數組來存儲,如下圖即是一個大頂堆,堆中節點按序號依次存放的數組中。序號爲 i 的節點的子節點序號分別爲 2*i 、 2*i+1 ,序號爲 j 的子節點的父節點序號爲 j/2 。
算法描述
- 將待排序數組構建成一個大頂堆,也就是變換原始數組中元素的位置,使之滿足大頂堆的定義,這一步可以遞歸完成。
- 將堆頂節點輸出並移除,並將堆中末尾節點替換掉堆頂節點。
- 將變換後的堆重新構造成大頂堆。
- 重複第2步、第3步直到堆中節點全部輸出。
建議不明白的同學觀看視頻https://www.bilibili.com/vide...