幾種排序算法的比較

1.插入排序:每次將一個待排的記錄插入到前面的已經排好的隊列中的適當位置。
①.直接插入排序

直接排序法在最好情況下(待排序列已按關鍵碼有序),每趟排序只需作1次比較而不需要移動元素。所以n個元素比較次數爲n-1,移動次數0。
最差的情況下(逆序),其中第i個元素必須和前面的元素進行比較i次,移動個數i+1,所以總共的比較次數 比較多,就不寫出來了

總結:是一種穩定的排序方法,時間複雜度O(n^2),排序過程中只要一個輔助空間,所以空間複雜度O(1)

②.希爾排序

縮小增量排序,對直接插入排序的一種改進
分組插入方法。

總結:是一種不穩定的排序方法,時間複雜度O(n^1.25),空間複雜度O(1)

2.交換排序
①.冒泡排序

最好的情況下,就是正序,所以只要比較一次就行了,複雜度O(n)
最壞的情況下,就是逆序,要比較n^2次才行,複雜度O(n^2)

總結:穩定的排序方法,時間複雜度O(n^2),空間複雜度O(1),當待排序列有序時,效果比較好。

②.快速排序

通過一趟排序將待排的記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一個部分的關鍵字小,然後再分別對這兩個部分記錄繼續進行排序,以達到整個序列有效。

總結:在所有同數量級O(nlogn)的排序方法中,快速排序是性能最好的一種方法,在待排序列無序時最好。算法的時間複雜度是O(nlogn),最壞的時間複雜度O(n^2),空間複雜度O(nlogn)

3.選擇排序
①.直接選擇排序

和序列的初始狀態無關

總結:時間複雜度O(n^2),無論最好還是最壞

②.堆排序

直接選擇排序的改進

總結:時間複雜度O(nlogn),無論在最好還是最壞情況下都是O(nlogn)

4.歸併排序

總結:時間複雜度O(nlogn),空間複雜度O(n)

5.基數排序

按組成關鍵字的各個數位的值進行排序,是分配排序的一種。不需要進行排碼值間的比較就能夠進行排序。

總結:時間複雜度O(d(n+rd))

 

總總結:

n比較小的時候,適合 插入排序和選擇排序

基本有序的時候,適合 直接插入排序和冒泡排序

n很大但是關鍵字的位數較少時,適合 鏈式基數排序

n很大的時候,適合 快速排序 堆排序 歸併排序

無序的時候,適合 快速排序

穩定的排序:冒泡排序 插入排序 歸併排序 基數排序

複雜度是O(nlogn):快速排序 堆排序 歸併排序

輔助空間(大 次大):歸併排序 快速排序

好壞情況一樣:簡單選擇(n^2),堆排序(nlogn),歸併排序(nlogn)

最好是O(n)的:插入排序 冒泡排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章