演算法:先生成隨機數,賦值到陣列,將陣列第乙個元素a[0]設定為哨兵,函式呼叫陣列和隨機數個數n,再設定n/2的根結點與孩子結點進行比較操作,若右孩子存在,則選出三個數里最小的數賦值給根節點,如果右孩子不存在,則只需比較左孩子與根節點大小,一直迴圈操作至a[1],再從a[2]開始進行根結點與孩子結點進行比較操作,一直到n/2為止,最後,依次輸出a[1],輸出後將a[n]賦值給a[1];再進行遞迴操作,重複以上步驟,直至陣列為空
要點:畫出二叉樹是方便理解,並非資料的結構就是如同二叉樹那般儲存,儲存形式還是一排
編譯器:vs2013
**
1 #include "結果stdafx.h
"2 #include34//
函式宣告
5void heapsort(int a, int n); //
堆排序(從小到大)
6void hsort(int a, int n); //
輔助堆排序
7void change(int &a, int &b); //
值互換8
9int
main()
1022
23 a[i] = '\0'
;2425 printf("\n"
);26
heapsort(a, n);27}
2829
//堆排序(從小到大)
30void heapsort(int a, int
n)31
4344 printf("
\n\n");
45}4647
4849
//輔助堆排序(從小到大)
5051
void hsort(int a, int
n)52
6768
for (i = 2; i <= n / 2; i++)
697980}
8182
8384
//值互換
85void change(int &a, int &b)
86
資料結構之堆排序
在資料結構中,堆排序是非常重要的乙個知識點,尤其像在期末考試 考研等計算機考試中經常會考察堆排序,並要求畫出示意圖.下面主要通過一道考研題目講述堆排序的知識,希望對大家有所幫助.文章內容參考嚴蔚敏的 資料結構 王道論壇的 資料結構 和自己的一些理解 參看動態圖 堆排序是一種樹形選擇排序方法,它的特點...
資料結構之堆排序
堆排序就是利用堆 本文利用大頂堆 進行排序的方法。它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 就是將它與堆陣列的末尾元素交換,此時末尾元素就是最大值...
資料結構之堆排序
堆具有完全二叉樹的性質 每個結點大於等於左右孩子的堆稱為大頂堆,或每個結點小於或等於左右孩子的堆稱為小頂堆。堆排序 將待排序的序列構建成乙個大頂堆,此時,最大值在整個堆的根結點。將它移走 其實就是將它與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的n 1個序列重新造成乙個,這樣會得到n個...