堆排序 C 實現

2021-10-05 04:56:34 字數 937 閱讀 1534

堆排序演算法的步驟:

例如大頂堆

1、首先將要排序的陣列構造成乙個大頂堆,陣列本身可以看作是乙個完全二叉樹的順序儲存結構,構建大頂堆是乙個從下至上進行篩選的過程,從最後乙個非終端結點(n/2)開始(當陣列元素是從下標1開始儲存的,最後乙個非終端結點的下標就是n/2)。如果發現左右子結點的值大於父結點,則將兩者互換,對每乙個非終端結點篩選完成後就形成了乙個大頂堆。

2、取出堆首元素(此時為最大的元素),將堆首元素與大頂堆的最後乙個元素互換,此時最大的元素來到了陣列的末尾。然後再將除末尾元素的(n-1)個元素構造成大頂堆。因為只有堆首元素發生了改變,所以在重新構造大頂堆的時候只需要篩選堆首元素即可。

大頂堆排序的**如下:

//大頂堆排序

#include

#include

using

namespace std;

#define _crt_secure_no_warnings 1

void

heapadjust

(vector<

int>

&a,int s,

int m)

// 對結點進行調整

if(re >= a[i]

)else

} a[s]

= re;

}void

heapsort

(vector<

int>

&a,int n)

int temp;

for(

int j = n; j >

0; j--

)// 步驟

二、將堆首元素與陣列尾元素進行交換,再將n-1個元素構造成大頂堆

}int

main()

heapsort

(a, n)

;return0;

}

c 實現堆排序

include include include using namespace std 對比枝節點和左右子節點,將比較大的節點放置於枝節點 template int heapadjust t t,int i,int size if rightchild size t rightchild t max...

C 實現堆排序

堆排序是一種具有合併排序和插入排序共同優點的排序方法。它的時間複雜度為o nlgn 它也是一種原地排序演算法 在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。要介紹堆排序首先要介紹什麼是堆。1.建堆 堆資料結構是一種陣列物件,它可以被視為一顆完全二叉樹,如下圖。右邊陣列表示的堆可以用左邊的完全二...

堆排序(C 實現)

堆排序執行時間 n lgn 它是一種原地 in place 排序演算法 在任何時候,陣列中只有常數個元素儲存在陣列外。堆的資料結構不至少在堆排序中有用,還可以構成乙個有效的優先佇列。二叉堆資料結構是一種陣列物件,它可以被看做是一棵完全二叉樹。樹中的每個節點與陣列中存放該節點值的那個元素對應。除了最後...