https://jimmee.iteye.com/blog/1985774
時間復雜度
n^2表示n的平方,選擇排序有時叫做直接選擇排序或簡單選擇排序
| 排序方法 | 平均時間 | 最好時間 | 最壞時間 |
| 桶排序(不穩定) | O(n) | O(n) | O(n) |
| 基數排序(穩定) | O(n) | O(n) | O(n) |
| 歸並排序(穩定) | O(nlogn) | O(nlogn) | O(nlogn) |
| 快速排序(不穩定) | O(nlogn) | O(nlogn) | O(n^2) |
| 堆排序(不穩定) | O(nlogn) | O(nlogn) | O(nlogn) |
| 希爾排序(不穩定) | O(n^1.25) | ||
| 冒泡排序(穩定) | O(n^2) | O(n) | O(n^2) |
| 選擇排序(不穩定) | O(n^2) | O(n^2) | O(n^2) |
| 直接插入排序(穩定) | O(n^2) | O(n) | O(n^2) |
O(n)這樣的標志叫做漸近時間復雜度,是個近似值.各種漸近時間復雜度由小到大的順序如下
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
一般時間復雜度到了2^n(指數階)及更大的時間復雜度,這樣的算法我們基本上不會用了,太不實用了.比如遞歸實現的漢諾塔問題算法就是O(2^n).
平方階(n^2)的算法是勉強能用,而nlogn及更小的時間復雜度算法那就是非常高效的算法了啊.
空間復雜度
冒泡排序,簡單選擇排序,堆排序,直接插入排序,希爾排序的空間復雜度為O(1),因為需要一個臨時變量來交換元素位置,(另外遍歷序列時自然少不了用一個變量來做索引)
快速排序空間復雜度為logn(因為遞歸調用了) ,歸並排序空間復雜是O(n),需要一個大小為n的臨時數組.
基數排序的空間復雜是O(n),桶排序的空間復雜度不確定
最快的排序算法是桶排序
所有排序算法中最快的應該是桶排序(很多人誤以為是快速排序,實際上不是.不過實際應用中快速排序用的多)但桶排序一般用的不多,因為有幾個比較大的缺陷.
1.待排序的元素不能是負數,小數.
2.空間復雜度不確定,要看待排序元素中最大值是多少.
所需要的輔助數組大小即為最大元素的值.
