排序算法分類


一、排序的分類

1、根據待排序的數據大小不同,使得排序過程中所涉及的存儲器不同,可分為: 內部排序(內存即夠,以下十個算法均為內部排序) 、外部排序 (還需訪問外存)

2、排序關鍵字可能出現重復,根據重復關鍵字的排序情況可分為: 穩定排序(排序后重復關鍵字記錄的相對次序保持不變) 、不穩定排序 

3、對於內部排序,依據不同的排序原則,可分為: 插入排序、交換(快速)排序 、選擇排序 、歸並排序 、計數排序

4、針對內部排序所需的工作量划分,可分為: 簡單排序 O(n^2) 、先進排序 O(nlogn) 、基數排序 O(d*n)

二、排序細分

1、插入排序 :直接插入排序 、2-路插入排序 、希爾排序

2、交換(快速)排序 :冒泡排序 、快速排序(快排)

3、選擇排序 :簡單選擇排序 、樹形選擇排序 、堆排序

4、簡單排序 :直接插入排序 、Shell排序 、直接選擇排序 、冒泡排序 、快速排序

5、先進排序 :堆排序 、歸並排序

三、外部排序

1、多路平衡歸並排序 

2、置換-選擇排序 

3、最佳歸並樹形排序

四、排序算法的選擇

每種排序算法都各有優缺點。因此,在實用時需根據不同情況適當選用,甚至可以將多種方法結合起來使用。

影響排序的因素有很多,平均時間復雜度低的算法並不一定就是最優的。相反,有時平均時間復雜度高的算法可能更適合某些特殊情況。同時,選擇算法時還得考慮它的可讀性,以利於軟件的維護。一般而言,需要考慮的因素有以下四點: 

1、待排序的記錄數目n的大小; 

2、記錄本身數據量的大小,也就是記錄中除關鍵字外的其他信息量的大小; 

3、關鍵字的結構及其分布情況; 

4、對排序穩定性的要求。

設待排序元素的個數為n:

1)當n較大,則應采用時間復雜度為O(nlog2n)的排序方法: 快速排序、堆排序或歸並排序序。

  • 快速排序:是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短。

  • 堆排序 : 內存空間允許且要求穩定性的。

  • 歸並排序:它有一定數量的數據移動,所以可通過與插入排序組合,先獲得一定長度的序列,然后再合並,在效率上將有所提高。 

2)當n較大,內存空間允許,且要求穩定性:歸並排序 。

3)當n較小,可采用直接插入或直接選擇排序。 

  • 直接插入排序:當元素分布有序,直接插入排序將大大減少比較次數和移動記錄的次數。 

  • 直接選擇排序 :元素分布有序,如果不要求穩定性,選擇直接選擇排序 。

4)一般不使用或不直接使用傳統的冒泡排序。 

5)基數排序它是一種穩定的排序算法,但有一定的局限性: 

  • 關鍵字可分解。 

  • 記錄的關鍵字位數較少,如果密集更好 。

  • 如果是數字時,最好是無符號的,否則將增加相應的映射復雜度,可先將其正負分開排序。

 


免責聲明!

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



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