堆排序的c語言實現

2021-07-11 14:22:45 字數 455 閱讀 9678

說到堆排序,其實就是首先建立乙個大頂堆或者小頂堆,然後把他的最頂上的元素輸出,然後讓最頂上的元素與最後的元素進行交換並刪除最後乙個元素,依次輸出則得到排好序的元素。

具體**實現如下(已通過編譯並成功執行):

#includevoid swap(int a,int x,int y)

void buildmaxheap(int a,int lastindex)

{ //從最後乙個結點的父節點開始

int i=0,k=0,bigindex=0;

for(i=(lastindex-1)/2;i>=0;i--)

{ k=i;

while(k*2+1<=lastindex)

{//k結點的子節點

bigindex=k*2+1;

//證明存在右子節點

if(bigindex

C語言實現堆排序

一 堆排序的原理。堆排序是利用堆的性質進行的一種選擇排序。堆實際上是一顆完全二叉樹,其中任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 或 key i key 2i 1 key i key 2i 任何一非葉節點的關鍵字不大於或者不小於其左右孩子。二 堆排序的思想。利用...

C語言實現堆排序

堆排序在初學時對我來說也是比較難掌握的一種排序方法,大頂堆 小頂堆的定義能搞明白就不錯了,演算法在初學的時候基本是自己寫不出來的。現在回過頭來看一看演算法描述,發現其實也不難理解,甚至還能看出來書中演算法描述的小瑕疵,不過還是要記錄一下,難免會忘記。將初始待排序關鍵字序列 r1,r2 rn 構建成大...

堆排序 c語言實現

演算法特點 1.不穩定排序 2.只能用於順序結構,不能用於鏈式結構 3.初始建堆所需比較次數較多,因此記錄數較少不宜採用。堆排序在最壞情況下時間複雜度為o nlogn 相對於快速排序的o n n 而言是乙個優點,當記錄比較多時較為高效。include include using namespace ...