c語言資料結構之 堆排序

2022-03-21 20:37:25 字數 1099 閱讀 6631

演算法:先生成隨機數,賦值到陣列,將陣列第乙個元素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個...