2017-07-24 17:04:23
writer:pprp
小根堆排序,使用陣列模擬堆,時間複雜度為o(nlogn)
調整部分的程式比較難理解,有的地方還是不太清楚。
**如下:
#include usingnamespace
std;
const
int n = 100000
;int a[n+1
];void adjust_down(int i,int
m)
else
//如果符合最小堆,那麼不進行操作
}}int
main()
for(i = n/2; i>=1; i--) //
只需從一半開始調整??
for(i = n; i >= 2; i--)
for(i = 1 ; i <= n; i++)
cout
<< a[i] << "";
cout
}
堆排序(大根堆 小根堆)
堆 堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。堆分為大頂堆和小頂堆,滿足key i key 2i 1 ke...
堆排序之小根堆
一 堆 1.概念 它是一種完全二叉樹 即前n 1層是滿的,最後一層連續缺失右邊的結點 2.堆的目的 排序 3.堆的建立 建立一棵完全二叉樹 4.儲存方式 鏈式儲存,按層儲存 5.演算法 建立結構體,宣告結點型別 typedef struct node 6.先建立根結點,後建立其他結點 採用佇列儲存資...
堆排序(大根堆)
堆排序是利用堆的性質進行的一種選擇排序。下面先討論一下堆。1.堆堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。...