堆排序模板

2021-10-09 10:09:10 字數 636 閱讀 3480

#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...