關於排序的總結(穩定性與復雜度)


目錄:

  • 穩定性
  • 復雜度

 

穩定性與復雜度

穩定性:指排序后,相同元素保持出現的先后順序。

時間復雜度是O(N2),額外空間負責度O(1):

  • l  冒泡排序:當遇到相同數時,該數不交換,將后面的數往下沉。可以穩定;
  • l  插入排序:當遇到相同數時,該數不交換;可以穩定;
  • l  選擇排序:做不到穩定性。因為你要從后面的所有數中找到最小的,然后將前面的某一個a與該最值交換,如果有多個a存在,那么,a的先后順序將無法保證。故做不到。

復雜度是O(N*logN):

  • l  歸並排序:merge時,當相同時先拷貝左邊(小區域)的數;可以穩定; 額外空間復雜度為O(N);
  • l  快排:做不到穩定性; 額外空間復雜度為O(logN);
  • l  堆排:做不到穩定性。在建大根堆的時候,就都已經不能保證穩定性了。 額外空間復雜度為O(1);

 

排序 穩定性 時間復雜度 額外空間復雜度
冒泡排序 穩定 O(N2) O(1)
插入排序 穩定 O(N2) O(1)
選擇排序 O(N2) O(1)
歸並排序 穩定 O(N*logN) O(N)
快排 O(N*logN) O(logN)
堆排 O(N*logN) O(1)

 

 

 

 

 

 

 

 

 在補一補哈:

排序分類大概有這些,上面的知識列出了比較常見的:

 

 

 再補一個全的:

 

 

 發現這一個更全:

 

 

注:

1 歸並排序可以通過手搖算法將空間復雜度降到O(1),但是時間復雜度會提高。

2 基數排序時間復雜度為O(N*M),其中N為數據個數,M為數據位數

 

輔助記憶

  • 時間復雜度記憶

1. 冒泡、選擇、直接 排序需要兩個for循環,每次只關注一個元素,平均時間復雜度為O(n2)O(n2)(一遍找元素O(n)O(n),一遍找位置O(n)O(n))
2. 快速、歸並、希爾、堆基於二分思想,log以2為底,平均時間復雜度為O(nlogn)O(nlogn)(一遍找元素O(n)O(n),一遍找位置O(logn)O(logn))

  • 穩定性記憶---“快希選堆”(快犧牲穩定性) 

1. 排序算法的穩定性:排序前后相同元素的相對位置不變,則稱排序算法是穩定的;否則排序算法是不穩定的。

 

 

 

 

Over。。。

 

 參考:

1. 排序算法時間復雜度、空間復雜度、穩定性比較(里面有動圖,很好理解)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM