要求:從小到大排序
思路:先將陣列構建成大頂堆, 然後依次「刪除」頂部元素 到末尾
/**
* 「下沉」操作 ,如果構建大頂堆,將小的下沉;如果構建小頂堆,將大的下沉;這裡是將小的下沉
* 由於從底部開始調整,,下面的已經是大頂堆了
* @param array 待調整的陣列(堆)
* @param parentindex 父節點
* @param lastindex 最大位置
*/public
static
void
downadjust
(int
array,
int parentindex,
int lastindex)
// 看一下父節點是否需要下沉
if(tmp>=array[biggerchildindex]
)// 大的上浮
array[parentindex]
=array[biggerchildindex]
;// 繼續往下調整,更新指標
parentindex=biggerchildindex;
biggerchildindex=
2*parentindex+1;
}// 進行最後的替換
array[parentindex]
=tmp;
}/**
* 進行堆排序
* @param array 待排序的陣列
*/public
static
void
heapsort
(int
array)
// 進行堆排序 -- 不斷將大頂堆的頂部 「刪除」,不斷換新的最大元素上來
for(
int curlastindex=array.length-
1;curlastindex>
0;curlastindex--
)}
演算法 排序演算法之堆排序
package sortarith 堆排序 構建最大堆,堆頂即為最大元素,每次取出最大元素後,再重新構建堆,這樣再拿出次大值,迴圈往返 注意 構建堆時需要調整每個非葉子節點,確定其為子堆的最大值 而調整堆時,只需要調整堆頂元素 特例1 若所給待排序陣列array本身已是最大堆型別,可不進行構建堆,即...
演算法 排序演算法之堆排序
堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 大頂堆 每個節點的值都大於或等於其子節點的值,在堆排序演算法...
排序演算法之堆排序
前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 當然,這是小根堆,大根堆則換成 號。k i 相當於二叉樹的非葉子結點,k 2i 則...