事實上collections.sort方法底層就是呼叫的arrays.sort方法,而arrays.sort使用了兩種排序方法,快速排序和優化的歸併排序。
快速排序主要是對那些基本型別資料(int,short,long等)排序, 而歸併排序用於對object型別進行排序。
使用不同型別的排序演算法主要是由於快速排序是不穩定的,而歸併排序是穩定的。這裡的穩定是指比較相等的資料在排序之後仍然按照排序之前的前後順序排列。對於基本資料型別,穩定性沒有意義,而對於object型別,穩定性是比較重要的,因為物件相等的判斷可能只是判斷關鍵屬性,最好保持相等物件的非關鍵屬性的順序與排序前一致;另外乙個原因是由於歸併排序相對而言比較次數比快速排序少,移動(物件引用的移動)次數比快速排序多,而對於物件來說,比較一般比移動耗時。
此外,對大陣列排序。快速排序的sort()採用遞迴實現,陣列規模太大時會發生堆疊溢位,而歸併排序sort()採用非遞迴實現,不存在此問題。
總結:首先先判斷需要排序的資料量是否大於60。
小於60:使用插入排序,插入排序是穩定的
大於60的資料量會根據資料型別選擇排序方式:
基本型別:使用快速排序。因為基本型別。1、2都是指向同乙個常量池不需要考慮穩定性。
object型別:使用歸併排序。因為歸併排序具有穩定性。
注意:不管是快速排序還是歸併排序。在二分的時候小於60的資料量依舊會使用插入排序
java sort 個人筆記
快速排序主要是對那些基本型別資料 int,short,long等 排序,而歸併排序用於對object型別進行排序。使用不同型別的排序演算法主要是由於快速排序是不穩定的,而歸併排序是穩定的。這裡的穩定是指比較相等的資料在排序之後仍然按照排序之前的前後順序排列。對於基本資料型別,穩定性沒有意義,而對於o...
快速排序原理
高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是 快速排序 啦!光聽這個名字是不是就覺得很高階呢。假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它...
快速排序原理
速排基礎 在要排的數 比如陣列a 中選擇乙個中心值key,通過一次排序將陣列a分成兩部分,其中以key值為中心,key值右邊都比key值大,key值左邊的都key值小,然後對這兩部分分別重複這個過程,直到整個有序,然後使用遞迴呼叫即可。排序過程如下 我們以陣列,選擇第乙個元素30為基準值。初始排序為...