資料結構 堆排序的向下調整演算法

2021-10-13 19:48:24 字數 807 閱讀 6869

要明白向下調整演算法首先要掌握資料結構中堆的定義(不是記憶體中的堆)。

1·概念:堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹結構。

2·堆的分類:最大堆:每個父節點的值都大於孩子節點。最小堆:每個父節點的值都小於孩子節點

向下調整演算法的作用就是通過從上到下的演算法排序,將任意乙個堆變成最小堆或者最大堆。

步驟:(此處以最小堆為例)

1、從根節點的左右孩子中選取乙個較小值min

2、當前需要調整的資料與較小值min進行比較

①、大於min:和min進行交換,從交換後的位置繼續執行第1步;

②、小於等於min:結束

#define _crt_secure_no_warnings 1

#include

//向下調整演算法---以最小堆為例

void

shift_down

(int

*arr,

int n,

int curpos)

//n-陣列大小 curpos-需要調整的位置

else

break;}

}void

test()

;shift_down

(arr,

sizeof

(arr)

/sizeof

(arr[0]

),0)

;}intmain()

測試用例:陣列【10,5,3,8,7,6】

**輸出結果:【3,5,6,8,7,10】

堆排序(向下調整建堆後再排序)

includeusing namespace std void adjustdown int int int void buildmaxheap int a,int len void adjustdown int a,int k,int len a k temp 找到了最終的位置並放入 void h...

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

基本介紹 基本思想 舉例 示例 public class heapsortdemo 1 將無序陣列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆 int k 1 for int i arr.length 2 1 i 0 i 2 將堆頂元素與末尾元素交換,將最大的元素 沉 到陣列末端 3 重新調整...

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

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