要明白向下調整演算法首先要掌握資料結構中堆的定義(不是記憶體中的堆)。
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堆調整 堆調整的前提是已建好了乙個堆,但是因為輸出...