排序算法通過了很長時間的演變,產生了不少種不一樣的方法。對於初學者來講,對它們進行整理便於理解記憶顯得很重要。每種算法都有它特定的使用場合,很難通用。所以,咱們頗有必要對全部常見的排序算法進行概括。算法
排序大的分類能夠分爲兩種:內排序和外排序。在排序過程當中,所有記錄存放在內存,則稱爲內排序,若是排序過程當中須要使用外存,則稱爲外排序。下面講的排序都是屬於內排序。atom
內排序有能夠分爲如下幾類:spa
(1)、插入排序:直接插入排序、二分法插入排序、希爾排序。xml
(2)、選擇排序:直接選擇排序、堆排序。blog
(3)、交換排序:冒泡排序、快速排序。排序
(4)、歸併排序圖片
(5)、基數排序內存
表格版:table
排序方法 | 時間複雜度(平均) | 時間複雜度(最壞) | 時間複雜度(最好) | 空間複雜度 | 穩定性 | 複雜性 |
---|---|---|---|---|---|---|
直接插入排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 穩定 | 簡單 |
希爾排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 不穩定 | 較複雜 |
直接選擇排序 | O(n2)O(n2) | O(n2)O(n2) | O(n2)O(n2) | O(1)O(1) | 不穩定 | 簡單 |
堆排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(1)O(1) | 不穩定 | 較複雜 |
冒泡排序 | O(n2)O(n2) | O(n2)O(n2) | O(n)O(n) | O(1)O(1) | 穩定 | 簡單 |
快速排序 | O(nlog2n)O(nlog2n) | O(n2)O(n2) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | 不穩定 | 較複雜 |
歸併排序 | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(nlog2n)O(nlog2n) | O(n)O(n) | 穩定 | 較複雜 |
基數排序 | O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r)) | O(n+r)O(n+r) | 穩定 | 較複雜 |
圖片版:class