排序七之堆排序

2021-07-09 20:05:05 字數 890 閱讀 5724

heap sort

一種基於選擇排序思想,利用堆結構和二叉樹的一些性質來完成資料排序的排序演算法。

堆排序的關鍵是構造堆結構,準確而言,堆結構即是乙個完全二叉樹,樹中的每乙個節點對應原始資料的乙個記錄。每個節點應滿足以下條件:

1)從小到大排序:要求非葉結點的資料要大於或等於其左、右子節點的資料。

2)從大到小排序:要求非葉節點的資料要小於或等於其左、右子節點的資料。

乙個完整的堆排序需要反覆經過兩個步驟:構造堆結構和堆排序的輸出。

構造堆結構過程:

對於乙個非葉結點ai,這裡假定ai的左子樹與右子樹已經進行了篩運算,即已構成堆結構;

1:比較ai的左子樹與右子樹的最大值,將最大值放在aj中。

2:將ai的資料與aj的資料進行比較,如果ai大於aj表示以ai為根的子樹已構成堆結構,便可以終止運算。

3:如果ai小於aj,則將ai與aj互換位置。

4:經過第三步後,可能會破壞以ai為根的堆,因為此時ai的值為原來的aj。下面以aj為根重複前面的步驟,直到滿足堆結構的定義,即父節點大於子節點。這樣一aj為根的子樹就被調整為乙個堆結構。

堆排序的輸出過程:

1:將堆結構的根節點放到陣列的最後。

2:除最後乙個節點外的其他節點重新執行前面的構造堆過程。

#include#include#include#define size 10

void heapsort(int *a,int n)

{ int i,j,h,k;

int t;

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

{while(2*i+10;i--)

{t=a[0];

a[0]=a[i];

a[i]=t;

k=0;

while(2*k+1

排序七 堆排序

時間複雜度 最好 o n o n 平均o n o nlogn 最差o n o nlogn 空間複雜度 o n o 1 穩定性 不穩定 堆 順序儲存的完全二叉樹,其每個結點均小於等於或大於等於其子節點。小根堆 每個結點元素的值都小於等於其子節點元素的值的堆。s i s 2 i 1 s i s 2 i ...

七大排序之堆排序

堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。學習堆排序前,先講解下什麼是資料結構中的二叉堆。二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆...

排序演算法之七 堆排序 Heap Sort

堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。將待排序的元素序列 r1,r2 rn 構建成最大堆,此堆為初始的無序區。關於最大堆的詳細構建過程請點這裡 將最大堆的堆頂元...