java sort排序原理


  事實上Collections.sort方法底層就是調用的Arrays.sort方法,而Arrays.sort使用了兩種排序方法,快速排序和優化的歸並排序。

    快速排序主要是對那些基本類型數據(int,short,long等)排序, 而歸並排序用於對Object類型進行排序。
    使用不同類型的排序算法主要是由於快速排序是不穩定的,而歸並排序是穩定的。這里的穩定是指比較相等的數據在排序之后仍然按照排序之前的前后順序排列。對於基本數據類型,穩定性沒有意義,而對於Object類型,穩定性是比較重要的,因為對象相等的判斷可能只是判斷關鍵屬性,最好保持相等對象的非關鍵屬性的順序與排序前一致;另外一個原因是由於歸並排序相對而言比較次數比快速排序少,移動(對象引用的移動)次數比快速排序多,而對於對象來說,比較一般比移動耗時。
    此外,對大數組排序。快速排序的sort()采用遞歸實現,數組規模太大時會發生堆棧溢出,而歸並排序sort()采用非遞歸實現,不存在此問題。

    總結:
    首先先判斷需要排序的數據量是否大於60。
    小於60:使用插入排序,插入排序是穩定的
    大於60的數據量會根據數據類型選擇排序方式:
         基本類型:使用快速排序。因為基本類型。1、2都是指向同一個常量池不需要考慮穩定性。
         Object類型:使用歸並排序。因為歸並排序具有穩定性。
    注意:不管是快速排序還是歸並排序。在二分的時候小於60的數據量依舊會使用插入排序  


免責聲明!

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



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