常用的排序算法的時間復雜度和空間復雜度
| 排序法 |
最差時間分析 |
平均時間復雜度 |
穩定度 |
空間復雜度 |
| 冒泡排序 |
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塊中的任一元素,……。然后使用二分查找及順序查找。 |
