使用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調整剩餘元素爲最大堆,最終得到有序數組。堆排序爲原地排序,適用於大數據量場景。

閱讀全文
堆是什麼?數據結構中堆的基本操作詳解

堆是基於完全二叉樹的特殊結構,用數組存儲,滿足大頂堆(父節點值≥子節點)或小頂堆(父節點值≤子節點)性質,能高效獲取最值,廣泛應用於算法。數組索引映射父子關係:左子節點2i+1,右子節點2i+2,父節點(i-1)//2。大頂堆根節點最大(如[9,5,7,3,6,2,4]),小頂堆根節點最小(如[3,6,5,9,7,2,4])。核心操作:插入(新元素放末尾,上浮調整至父節點滿足堆性質)、刪除(交換堆頂與末尾元素,下沉調整至堆頂滿足性質)、構建堆(從最後非葉子節點開始依次下沉調整)、獲取堆頂(直接取根節點)。應用於優先隊列、堆排序、Top K問題。堆結構與操作高效,對理解算法至關重要,初學者可從數組模擬入手掌握。

閱讀全文