堆排序Java實現

很早就學習了堆排序但當時沒有用代碼實現,現在再去想實現已經忘光光啦┑( ̄Д  ̄)┍,於是就去網上搜了一番,發現沒有一篇我能認真看完的文章,沒辦法就是沒耐心,就是笨唄。。。好了,言歸正傳= ̄ω ̄=

瞭解概念

首先明白什麼是堆,什麼是完全二叉樹,什麼是大頂堆,相信很容易理解。

堆可以用數組來存儲,如下圖即是一個大頂堆,堆中節點按序號依次存放的數組中。序號爲 i 的節點的子節點序號分別爲 2*i 、 2*i+1 ,序號爲 j 的子節點的父節點序號爲 j/2 。
堆的存儲

算法描述

  1. 將待排序數組構建成一個大頂堆,也就是變換原始數組中元素的位置,使之滿足大頂堆的定義,這一步可以遞歸完成。
  2. 將堆頂節點輸出並移除,並將堆中末尾節點替換掉堆頂節點。
  3. 將變換後的堆重新構造成大頂堆。
  4. 重複第2步、第3步直到堆中節點全部輸出。

建議不明白的同學觀看視頻https://www.bilibili.com/vide...

算法實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章