演算法之堆排序

2021-09-26 20:37:38 字數 1046 閱讀 6426

要求:從小到大排序

思路:先將陣列構建成大頂堆, 然後依次「刪除」頂部元素 到末尾

/**

* 「下沉」操作 ,如果構建大頂堆,將小的下沉;如果構建小頂堆,將大的下沉;這裡是將小的下沉

* 由於從底部開始調整,,下面的已經是大頂堆了

* @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 則...