演算法之堆排序

2021-07-26 10:43:20 字數 539 閱讀 1333

二叉堆可以分為兩種形式:最大堆和最小堆。在最大堆中,最大堆性質是指除了根以外的所有結點i都要滿足 a[parent(i)] >=a[i],堆中的最大元素存放在根結點中。最小堆的組織方式正好相反。

父節點=i/2

左節點為2i

右節點為2i+1

max-heapify過程:它是維護最大堆性質的關鍵過程。它的輸入為乙個陣列a和乙個下標i。在呼叫max-heapify的時候,我們假定根結點為left(i)和right(i)的二叉樹都是最大堆,但這時a[i]有可能小於其孩子,這樣就違背了最大堆的性質。max-heapify通過讓a[i]的值在最大堆中「逐級下降」,從而使得下標i為根節點的子樹重新遵循最大堆的性質。該過程**如下

public void maxheapify(int a, int i)else

if(r <= a.length-1 && a[r] > a[i])

if(largest != i)

}

演算法 排序演算法之堆排序

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