堆:堆的結構與應用,最小堆和最大堆入門

堆是一種特殊的完全二叉樹,核心特點是父節點與子節點滿足大小關係(最小堆父≤子,最大堆父≥子),能高效獲取極值(堆頂爲最小或最大元素),類似優先隊列。其底層爲完全二叉樹,每一層儘量填滿,最後一層從左到右排列。數組存儲時,左子節點索引=2i+1,右子節點=2i+2,父節點=(i-1)//2。基本操作包括插入(末尾添加後上浮)和刪除(堆頂刪除後尾元素頂替,再下沉),時間複雜度均爲O(log n)。堆廣泛用於優先隊列(任務調度)、找第k大元素、哈夫曼編碼等場景,是高效處理極值問題的關鍵結構。

閱讀全文
使用C++實現堆排序算法

堆排序是基於堆數據結構的高效排序算法,時間複雜度O(n log n),空間複雜度O(1),適用於大規模數據。堆是特殊完全二叉樹,分大頂堆(父≥子)和小頂堆,排序常用大頂堆。其存儲爲數組,索引i的父節點爲(i-1)/2,左右子節點爲2i+1和2i+2。核心步驟:1.構建初始大頂堆(從最後非葉子節點向上調整);2.排序(交換堆頂與未排序末尾元素,調整堆,重複直至完成)。C++實現包含swap、max_heapify(迭代調整子樹爲大頂堆)、heap_sort(構建堆並排序)函數,主函數測試數組排序,輸出結果正確。

閱讀全文
使用Python實現堆排序算法

堆排序是利用堆數據結構的高效排序算法,時間複雜度穩定爲O(n log n),空間複雜度O(1),適合大規模數據排序。堆是完全二叉樹,父節點值≥(最大堆)或≤(最小堆)子節點值。數組中堆的索引關係:父節點i的子節點爲2i+1、2i+2,子節點j的父節點爲(j-1)//2。 核心操作包括:1. **Heapify**:調整以i爲根的子樹爲最大堆,遞歸比較子節點並交換;2. **構建最大堆**:從最後非葉子節點(n//2-1)向上調整所有節點,確保整體滿足最大堆性質。 排序流程:先構建最大堆,再反覆交換堆頂(最大值)與堆尾元素,同時調用Heapify調整剩餘元素爲最大堆,最終得到有序數組。堆排序爲原地排序,適用於大數據量場景。

閱讀全文