二分查找:二分查找的適用場景,零基礎也能學會

這篇文章介紹了二分查找算法,其核心是在有序數組中通過比較中間元素,逐步縮小查找範圍,快速定位目標。它適用於有序、大數據量、靜態(少修改)且需快速查找的場景,如字典或配置文件。 查找過程通過左右指針`left`和`right`確定中間值`mid`,根據目標與中間值的大小調整指針:若中間值等於目標則找到;若目標更大,右移`left`;若更小,左移`right`,直至找到或範圍無效。 Python迭代實現的核心代碼通過`left <= right`循環,計算`mid = (left + right)//2`,邊界處理確保數組爲空或目標不存在時返回-1。時間複雜度爲O(log n)(每次範圍減半),空間複雜度爲O(1)(僅用常數變量)。 關鍵細節包括處理重複元素需擴展遍歷,單元素數組直接判斷,找不到目標返回-1。二分查找的“減治”思想高效解決有序大數據的快速查找問題,是算法基礎中的重要工具。

閱讀全文
二叉樹:二叉樹的三種遍歷方式,遞歸實現超簡單

這篇文章介紹了二叉樹的三種經典遍歷方式(前序、中序、後序),基於遞歸實現,核心是明確根節點的訪問位置。 二叉樹每個節點最多有左右子樹,遍歷即按特定順序訪問節點。遞歸是關鍵,類似“套娃”,函數自調用且範圍縮小,直到遇到空節點終止。 三種遍歷順序區別:前序(根→左→右)、中序(左→根→右)、後序(左→右→根)。以示例樹(根1,左2,右3;2的左4,右5)爲例: - 前序遍歷結果:1 2 4 5 3; - 中序遍歷結果:4 2 5 1 3; - 後序遍歷結果:4 5 2 3 1。 遞歸實現核心:終止條件(空節點返回)+ 按遍歷順序遞歸左右子樹。通過明確根位置和遞歸邏輯,可清晰理解遍歷過程。

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

歸併排序基於分治法,核心分三步:分解(將數組拆分爲左右子數組,直至單元素)、遞歸排序(各子數組遞歸排序)、合併(合併有序子數組爲整體有序數組)。 以數組[3,1,4,2]爲例,分解後遞歸排序各子數組,再合併爲[1,2,3,4]。Python實現含合併函數(按序合併兩個有序子數組)與遞歸排序函數(分解並遞歸調用合併)。 其特點:時間複雜度O(n log n),空間複雜度O(n)(需額外存儲合併結果),爲穩定排序(相等元素相對順序不變)。

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

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

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

快速排序基於“分而治之”思想,核心是選基準值分區並遞歸排序。基本思路:選基準值(如數組首元素),將數組分爲小於和大於基準值的兩部分,再遞歸處理子數組。 分區過程是關鍵:通過左右指針遍歷,右指針左移找小於基準值元素,左指針右移找大於基準值元素,交換後繼續,直到指針相遇,交換基準值到最終位置,完成分區。 Python實現中,`partition`函數確定基準位置,`quick_sort`遞歸處理左右子數組。測試代碼驗證了排序效果。 複雜度:平均O(n log n)(分區均衡),最壞O(n²)(如已排序數組且基準選首元素,可通過隨機選基準優化)。 快速排序是高效實用的排序算法,廣泛應用於實際場景,理解其分區邏輯和遞歸過程是掌握排序算法的關鍵。

閱讀全文