面試中,無論是問還是寫,排序被問到的次數總是很多。總結一些八大排序算法。
排序算法
插入,希爾,選擇,堆:
http://blog.csdn.net/sayhello_world/article/details/61927082
冒泡,快速
http://blog.csdn.net/sayhello_world/article/details/63258406
歸併
http://blog.csdn.net/sayhello_world/article/details/65631159
七大排序時間複雜度&空間複雜度&穩定性
初始序列對算法性能有無影響
排序方法 | 初始序列有無影響 | 最好情況 | 最壞情況 |
---|---|---|---|
插入排序 | 有 | 正序有序這樣只需要比較n次,不需要移動。因此時間複雜度爲O(n) | 逆序有序這樣每一個元素就需要比較n次,共有n個元素,因此實際複雜度爲O(n2) |
shell排序 | 有 | 與選的步長有關由於希爾排序的好壞和步長d的選擇有很多關係,因此,目前還沒有得出最好的步長如何選擇(現在有些比較好的選擇了,但不確定是否是最好的)。所以,不知道最好的情況下的算法時間複雜度。 | O(N*logN),最壞的情況下和平均情況下差不多。 |
選擇排序 | 無 | ||
堆排序 | 無 | ||
冒泡排序 | 有 | 正序有序,則只需要比較n次。故,爲O(n) | 逆序有序,則需要比較(n-1)+(n-2)+……+1,故,爲O(N*N) |
快速排序 | 有 | 無序時因爲每次都將序列分爲兩個部分(一般二分都複雜度都和logN相關),故爲 O(NlogN) | 基本有序時,退化爲冒泡排序,幾乎要比較N*N次,故爲O(N*N) |
歸併排序 | 無 |