堆排序演算法的步驟:
例如大頂堆
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 排序演算法 在任何時候,陣列中只有常數個元素儲存在陣列外。堆的資料結構不至少在堆排序中有用,還可以構成乙個有效的優先佇列。二叉堆資料結構是一種陣列物件,它可以被看做是一棵完全二叉樹。樹中的每個節點與陣列中存放該節點值的那個元素對應。除了最後...