排序演算法 之堆排序的實現

2021-07-08 18:48:40 字數 613 閱讀 3924

#includeusing namespace std;

/* 1:找到第乙個非葉子節點的位置cur:陣列元素個數size/2-1

2:從cur開始,依次將各子樹調整為最大堆--->整體成為最大堆

3:堆頂元素與陣列最後乙個元素交換

4:陣列元素減1,重複執行上述操作

*/void adjustup(int *arr, int size)

//左右孩子中較大的節點,與根節點比較,根節存放較大值

if (arr[max] > arr[cur])

//為下一顆樹調整做準備

cur--; }}

void heapsort(int *arr, int size)

}void print(int *arr, int size)

cout << endl;

}int main()

; int size = sizeof(arr) / sizeof(arr[0]);

heapsort(arr, size);

print(arr, size);

system("pause");

return 0;

}

排序演算法之堆排序演算法的實現

堆排序 利用堆資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。首先簡單了解下堆結構。堆是具有以下性質的完全二叉樹 每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆 或者每個結點的值都小於或等於其左右孩子結點的值,稱為小頂...

排序演算法之堆排序java實現

堆排序 heap sort 的基本思想是迴圈執行如下過程直到陣列為 空 什麼是最大堆?堆是乙個具有這樣性質的順序二叉樹,每個非葉子節點的關鍵字大於等於它的孩子結點的關鍵字。顯然在乙個堆中,根節點具有最大值,而且堆中任何乙個結點的非空左 右子樹都是乙個堆,它的根節點到任一葉子的每條路徑上的節點都是遞減...

排序演算法之堆排序

前言 今天我來介紹下堆排序,在寫堆排序 之前,我們要知道堆的概念!堆的定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 當然,這是小根堆,大根堆則換成 號。k i 相當於二叉樹的非葉子結點,k 2i 則...