時間複雜度:o(nlog₂n)空間複雜度:o(1)不穩定
把此序列對應的二維陣列看成乙個完全二叉樹。那麼堆的含義就是:完全二叉樹中任何乙個非葉子節點的值均不大於(或不小於)其左,右孩子節點的值。由上述性質可知大頂堆的堆頂的關鍵字肯定是所有關鍵字中最大的,小頂堆的堆頂的關鍵字是所有關鍵字中最小的。因此我們可使用大頂堆進行公升序排序, 使用小頂堆進行降序排序。
基本思想:
此處以大頂堆為例,堆排序的過程就是將待排序的序列構造成乙個堆,選出堆中最大的移走,再把剩餘的元素調整成堆,找出最大的再移走,重複直至有序。
選擇排序 堆排序(Heap Sort)
演算法分析 堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。堆的定義如下 具有n個元素的序列 k1,k2,kn 當且僅當滿足 elif defined invert int arr n else int arr n endif int step 0 列印陣列 void print int ar...
堆排序練習(Heap Sort
一.目的以及背景知識 進行堆排序練習,掌握堆的構建與輸出。堆定義 對於序列a 1,n 對於任意i都有a i a 2i a i a 2 i 1 則該序列稱為大頂堆或者最大堆。反之則成為最小堆。堆篩選或堆調整 從最後乙個葉子結點開始篩選出該節點的兄弟結點與父節點中最大或最小的元素與父節點交換。建堆演算法...
堆排序(heap sort)總結
以前學資料結構的時候,用的是嚴的書,對於堆這個結構的概念似懂非懂。往往過了一段時間後有不會。現在趁著再次學習資料結構的機會,結合網上的資料整理出自己對堆的理解。二叉堆滿足二個特性 2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 1.堆是完全二叉樹。2.完全二叉樹通常用陣列儲存。3.完...