經常使用的排序算法的時間複雜度和空間複雜度算法
排序法數組 |
最差時間分析函數 |
平均時間複雜度排序 |
穩定度隊列 |
空間複雜度get |
冒泡排序table |
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塊中的任一元素,……。而後使用二分查找及順序查找。 |
一、二分查找時間複雜度:lonN;和快速排序的時間複雜度:NlogN
二、空間複雜度:通常狀況下是不考慮空間複雜度的,空間複雜度並非指全部的數據所佔用的空間,而是使用的輔助空間的大小,好比兩個矩陣的運算,在中間設置了一箇中間矩陣來保存一些數據,這些空間叫作空間複雜度。空間複雜度的運算很是麻煩,通常簡單的算法空間複雜度都是O(1),比較複雜的會告知空間複雜度,記住就行了。
三、算法:空間換時間