經常使用的排序算法的時間複雜度和空間複雜度算法
排序法 | 最差時間分析 | 平均時間複雜度 | 穩定度 | 空間複雜度 |
冒泡排序 | O(n2) | O(n2) | 穩定 | O(1) |
插入排序 | O(n2) | O(n2) | 穩定 | O(1) |
選擇排序 | O(n2) | O(n2) | 穩定 | O(1) |
二叉樹排序 | O(n2) | O(n*log2n) | 不必定 | O(n) |
快速排序 | O(n2) | O(n*log2n) | 不穩定 | O(log2n)~O(n) |
堆排序 | O(n*log2n) | O(n*log2n) | 不穩定 | O(1) |
希爾排序 | O | O | 不穩定 | O(1) |
查找算法時間複雜度數組
查找 | 平均時間複雜度 | 查找條件 | 算法描述 |
順序查找 | O(n) | 無序或有序隊列 | 按順序比較每一個元素,直到找到關鍵字爲止 |
二分查找(折半查找) | O(logn) | 有序數組 | 查找過程從數組的中間元素開始,若是中間元素正好是要查找的元素,則搜素過程結束;若是某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,並且跟開始同樣從中間元素開始比較。 若是在某一步驟數組爲空,則表明找不到。 |
二叉排序樹查找 | O(logn) | 二叉排序樹 | 在二叉查找樹b中查找x的過程爲: 1. 若b是空樹,則搜索失敗 2. 若x等於b的根節點的數據域之值,則查找成功; 3. 若x小於b的根節點的數據域之值,則搜索左子樹 4. 查找右子樹。 |
哈希表法(散列表) | O(1) | 先建立哈希表(散列表) | 根據鍵值方式(Key value)進行查找,經過散列函數,定位數據元素。 |
分塊查找 | O(logn) | 無序或有序隊列 | 將n個數據元素"按塊有序"劃分爲m塊(m ≤ n)。每一塊中的結點沒必要有序,但塊與塊之間必須"按塊有序";即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;而第2塊中任一元素又都必須小於第3塊中的任一元素,……。而後使用二分查找及順序查找。 |