#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 則...