Java SDK中的排序分爲兩種狀況:算法
1、對基礎類型數組的排序,使用DualPivotQuicksort類
a、若是是對char、short數組的排序,由於byte、char、short分別爲8bit、16bit、16bit,能表示的最大數比較小(2^16):
因此,對它們的排序策略爲數組長度小於32的時候使用直接插入排序、數組長度小於(12八、32768)的時候使用快速排序、其餘使用計數排序(時間長,須要128或者32768長度的數組輔助)
b、對於其餘幾種基礎類型的數組排序,由於長度大,不適用計數排序,故策略爲:若是數組長度小於32,使用直接插入排序,不然使用快速排序
2、對於非基礎類型的排序,使用ComparableTimSort類 採用的排序算法爲二分插入排序,特色是每次向有序區域插入一個值時,不是逐個向前比較,而是採用二分查找的思路,和中間那個值比較。這個能減小查找的次數從N^2到nlogn,可是交換的次數仍然爲N^2, 由於它是數組,而不是鏈表,沒法直接插入到那個位置,仍是須要找到index以後的元素逐個後移,不過這裏能夠使用System.arrayCoy的方法,提升性能