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 構建成最大堆,此堆為初始的無序區。關於最大堆的詳細構建過程請點這裡 將最大堆的堆頂元...