堆的建立
堆在很多方面都有運用,這裡寫一下將乙個完全二叉樹用一維陣列儲存後再轉化為乙個最小堆
**如下(假如樹中的資料都為整數)
#include
int a[50]
;int n;
void
swap
(int p,
int q)
void
siftdown
(int i)
if(t!=i)
else flag=1;
//父結點小於子結點,迴圈結束}}
void
creat()
}int
main()
以上就是將乙個完全二叉樹轉化為最小堆的過程,下面再介紹在最小堆建立完成後的堆排序
堆排序
直接進入**部分
#include
int a[50]
;int n;
void
swap
(int p,
int q)
void
siftdown
(int i)
if(t!=i)
else flag=1;
//父結點小於子結點,迴圈結束}}
void
creat()
}int
del(
)int
main()
堆排序的時間複雜度和快速排序一樣,也是o(nlogn) 最小堆排序
堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點分別是節點i的左...
最大堆 最小堆 堆排序
最 大 小堆的性質 1 是一顆完全二叉樹,遵循完全二叉樹的所有性質。2 父節點的鍵值 大於 小於等於子節點的鍵值 3 在堆排序中我們通常用的是最大堆,最小堆通常用在優先佇列中 尚未找到恰當的例子 堆排序 陣列 a 10 可以利用建堆的方式對其進行排序。因為堆是一顆完全二叉樹,根據完全二叉樹的性質可以...
最小堆建立
題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...