資料結構 堆排序(演算法)

2021-10-02 23:31:05 字數 1105 閱讀 5054

基本介紹

基本思想:

舉例:示例**

public

class

heapsortdemo

;/**

* 1)、將無序陣列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆;

*/int k =1;

for(

int i = arr.length /2-

1; i >=

0; i--

)/**

* 2)、將堆頂元素與末尾元素交換,將最大的元素「沉」到陣列末端;

* 3)、重新調整結構,使其滿足堆定義,繼續交換堆頂元素與當前末尾元素,反覆執行調整+交換步驟,直到整個序列有序

*/int temp;

for(

int j = arr.length -

1; j >

0; j--

) system.out.

printf

("排序完成後的陣列:%s\n"

, arrays.

tostring

(arr));

}/**

* 功能:將以i對應的非葉子節點的樹調整為大頂堆(明白什麼是順序儲存二叉樹)

* 舉例:int arr = => i=1 => adjustheap =>

* 如果我們再次呼叫adjustheap 傳入的是 i=0 =>

** @param arr 待調整的陣列

* @param i 表示非葉子節點在陣列中的索引

* @param length 表示對多少個元素繼續調整,length是在逐漸減少

*/public

static

void

adjustheap

(int

arr,

int i,

int length)

if(arr[k]

> temp)

else

}/*當for迴圈結束後,我們已將以i為父節點的樹的最大值放到了最頂(區域性)*/

/*將temp的值放到調整後的位置*/

arr[i]

= temp;

}}

資料結構排序演算法之堆排序

關於堆排序的相關知識非常複雜,不懂得可以參考任意一本資料結構教程,本部落格只對堆排序框架及 進行講解。堆排序分三個大的步驟 建初堆,堆調整,堆排序 其中最核心的是堆調整 1建初堆 從陣列中的最後乙個非葉子節點開始,從下而上倒推 重複呼叫堆調整函式 2堆調整 堆調整的前提是已建好了乙個堆,但是因為輸出...

資料結構與演算法 堆排序

1 堆的性質 堆是一棵完全二叉樹,除最後一層外每層都是滿的 元素個數為2 i 1 根節點為第1層 最後一層如果不滿則只缺少右邊葉結點。如果按照廣度優先,即從上至下,從左至右對節點編號。根節點序號為0,節點i的父節點是 i 1 2,左子節點是2 i 1。最小堆中任意父節點不能比子節點大,最大堆中任意父...

資料結構與演算法 堆排序

基礎概念 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。通俗理解 將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新...