堆排序 模板

2021-06-18 22:08:50 字數 773 閱讀 8426

很認真地看完了《算導》的排序之前的所有部分,除了演算法複雜度那一章的數學要求太高,難以完全駕馭以外,其他的部分還是很好理解的。。。

爭取把《算導》裡面出現的演算法都自己實現,製作自己的模板,以後好用。。。堆排序雖然在一般的時候是沒有快排好用,但是在優先佇列裡面很好用,所以也是很有力的**!

這個堆排序模板是我基本完全按照《演算法導論》裡面自己乙個字乙個字的敲上去的,除錯的時候修改了幾個小地方:1.heapsize,開始我準備寫乙個函式的,但是因為在sort函式裡面要執行自減操作,所以必須要用全域性變數才好處理;2.《算導》裡面是從陣列下標的1開始的,所以我在賦初值的時候將 a[0] 跳過了

#include //堆長度

int heapsize;

//大頂堆化

void max_heapify(int a, int i)

}//建堆

void build_max_heap(int a)

}//堆排序

void heapsort(int a)

}int main()

; //ok

int n = sizeof(a) / sizeof(int) - 1;

heapsize = n;

heapsort(a);

for (int i = 1; i <= n; i++)

printf("%d ", a[i]);

return 0;

}

執行結果為:

1 2 3 4 5 6 7 8 9 10

堆排序 模板 堆排序

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

堆排序模板

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