#include
#include
using
namespace std;
const
int n =
1e5+10;
int h[n]
,n,m,cnt;
void
down
(int x)
// x是元素在堆中的下標
}int
main
(void
)
cnt = n;
// 記錄現在堆中所有的元素
for(
int i = n /
2; i >=
0; i--
)// 從 n / 2 開始的原因是 n / 2 就是這個完全二叉樹的底層了,最開始的陣列中的元素都是亂序的,從頭部開始down的話,結果不一定滿足堆的性質
while
(m --
)// 進行m次的刪除根結點操作,每次刪除都是適用堆中的末尾元素來覆蓋根結點後,刪除尾結點,再down操作
// 根結點,確定根節點元素的位置(覆蓋根節點後,還原堆尾元素的位置)
cout << endl;
return0;
}
堆排序 模板 堆排序
biu 堆排序是乙個不穩定的排序演算法,對資料不敏感,時間複雜度穩定,主要分為兩部分 建堆 堆排序。其中建堆的時間複雜度是 o n o n o n 的,而排序選出乙個最大 最小值的過程是 o l ogn o logn o logn 的,一共需要n次操作,故總共的時間複雜度是 o n logn o n...
堆排序 模板
很認真地看完了 算導 的排序之前的所有部分,除了演算法複雜度那一章的數學要求太高,難以完全駕馭以外,其他的部分還是很好理解的。爭取把 算導 裡面出現的演算法都自己實現,製作自己的模板,以後好用。堆排序雖然在一般的時候是沒有快排好用,但是在優先佇列裡面很好用,所以也是很有力的 這個堆排序模板是我基本完...
堆排序模板
最小堆刪除堆頂法排序 include int n 儲存堆中的陣列的個數 int h 101 存放堆的陣列 void swap x,y 交換堆中的兩個元素 void shiftdown int i 第i個位置向下調整 if t i else flag 1 return void creat intde...