【資料結構與演算法】內部排序總結(附各種排序演算法原始碼)
轉載請註明出處:http://blog.csdn.net/ns_code/article/details/20540069
內部排序總結
這篇博文我們簡要地總結下各種內部排序方法。
這10種排序演算法中,前面7種屬於建立在“比較”基礎上的排序演算法,通過決策樹已經證明,任何基於比較進行的排序演算法的時 間複雜度不可能再優於O(n*logn)。後面3種不是建立在比較的基礎上的,因此,可以達到線性執行時間。
下面我們給出各種排序方法的時空複雜度的表格(屬於自己總結,有不對的地方,希望大家指正或補充)。
排序方法 | 最好時間複雜度 | 平均時間複雜度 | 最壞時間複雜度 | 空間複雜度 | 是否穩定 |
氣泡排序 | O(n) | O(n*n) | O(n*n) | O(1) | 穩定 |
插入排序 | O(n) | O(n*n) | O(n*n) | O(1) | 穩定 |
選擇排序 | O(n*n) | O(n*n) | O(n*n) | O(1) | 不穩定 |
希爾排序 | O(n) | 不定 | O(n*n) | O(1) | 不穩定 |
堆排序 | O(n*logn) | O(n*logn) | O(n*logn) | O(1) | 不穩定 |
歸併排序 | O(n*logn) | O(n*logn) | O(n*logn) | O(n) | 穩定 |
快速排序 | O(n*logn) | O(n*logn) | O(n*n) | O(logn) | 不穩定 |
計數排序 | O(n+k) | O(n+k) | O(n+k) | O(k) | 穩定 |
基數排序 | O(d(n+k)) | O(d(n+k)) | O(d(n+k)) | O(k) | 穩定 |
桶排序 | O(n) | O(n) | O(n) | 不定 | 取決於桶內 |
關於各種排序,給出如下幾點總結:
- 後面3種排序效率極高,且只有在一些特定條件下才可以使用,而且需要額外的輔助空間,如果d或k很大,其效能對於主存排序來說就不太好了,計數排序和基數排序最適合於n很大,而k和d很小的情況。
- 在基於比較的排序方法中,就平均效能而言,快速排序最佳。
- 對於最一般的內部排序應用程式,選用的方法一般不是插入排序、希爾排序就是快速排序。
- 歸併排序一般只用在小的或非常接近排好序的輸入資料上,因為需要O(n)的輔助空間,因此其效能對於主存排序不如快速排序那麼好,但是合併時外部排序的中心思想。
- 堆排序要比希爾排序慢,儘管它是一個帶有明顯緊湊內迴圈的O(n*logn)演算法。
- 效能比較好的幾種基於比較的內部排序中,只有歸併排序是穩定的,快速排序、堆排序和希爾排序都不穩定,而其他簡單的排序演算法基本都是穩定的,選擇排序除外。一般來說,對於基於比較的排序方法,如果比較是在相鄰兩個元素之間進行的,則該排序是穩定的。
原始碼打包下載
原始碼包括:氣泡排序、選擇排序、插入排序、希爾排序、堆排序、歸併排序、快速排序、計數排序、基數排序等,沒有實現桶排序。
完整原始碼打包下載地址:http://download.csdn.net/detail/mmc_maodun/6995321
相關文章
- 【資料結構與演算法】內部排序之三:堆排序(含完整原始碼)資料結構演算法排序原始碼
- 【資料結構與演算法】內部排序之五:計數排序、基數排序和桶排序(含完整原始碼)資料結構演算法排序原始碼
- 【資料結構與演算法】內部排序之二:氣泡排序和選擇排序(改進優化,附完整原始碼)資料結構演算法排序優化原始碼
- 【資料結構】 各種排序演算法的實現資料結構排序演算法
- 資料結構與演算法知識點總結(4)各類排序演算法資料結構演算法排序
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- 【演算法與資料結構】經典排序演算法總結演算法資料結構排序
- 複習資料結構:排序演算法(五)——快速排序的各種版本資料結構排序演算法
- 資料結構-各種排序演算法效率對比圖資料結構排序演算法
- 資料結構與演算法——排序資料結構演算法排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 【資料結構與演算法】內部排序之一:插入排序和希爾排序的N中實現(不斷優化,附完整原始碼)資料結構演算法排序優化原始碼
- [資料結構與演算法] 排序演算法資料結構演算法排序
- 資料結構與演算法(八):排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法之排序資料結構演算法排序
- 資料結構與演算法----# 一、排序資料結構演算法排序
- 資料結構與演算法:堆排序資料結構演算法排序
- 資料結構與演算法——快速排序資料結構演算法排序
- 資料結構與演算法——桶排序資料結構演算法排序
- 資料結構學習(C++)續——排序【6】內部排序總結 (轉)資料結構C++排序
- [資料結構拾遺]字串排序演算法總結資料結構字串排序演算法
- 各種排序演算法總結及C#程式碼實現排序演算法C#
- 資料結構與演算法 進階排序資料結構演算法排序
- 資料結構與演算法 基礎排序資料結構演算法排序
- 【資料結構與演算法】歸併排序資料結構演算法排序
- Java資料結構與排序演算法 (二)Java資料結構排序演算法
- Java資料結構與排序演算法 (三)Java資料結構排序演算法
- 資料結構與演算法之快速排序資料結構演算法排序
- 資料結構與演算法-反轉排序資料結構演算法排序
- Java資料結構與排序演算法 (一)Java資料結構排序演算法
- 資料結構與演算法——謝爾排序資料結構演算法排序
- 資料結構與演算法——歸併排序資料結構演算法排序
- 資料結構與演算法 排序與搜尋資料結構演算法排序