今天比較仔細的觀察了下1.6jdk下的java.util.Arrays.sort方法
稍微總結下:
sort分爲對基本數據類型(byte char short int float long double)和object類型的排序
1.對基本數據類型的排序
Arrays類中public方法都是sort,
但裏面實際做工作的是sort2和sort1
最實際的工作是sort1
sort2是做一些邊界處理的閒雜工作,類似於
幾個核心的sort1方法聲明:
private static void sort1(long x[], int off, int len)
private static void sort1(int x[], int off, int len)
private static void sort1(short x[], int off, int len)
private static void sort1(char x[], int off, int len)
private static void sort1(byte x[], int off, int len)
private static void sort1(double x[], int off, int len)
private static void sort1(float x[], int off, int len)
實現邏輯基本相同,如果數組的長度小於7,則是最簡單的插入排序,否則採用快速排序
由於快速排序在最壞情況下的時間複雜度爲O(n^2),故標誌元素的選取也是有講究的,
類似於
中的big arrays部分
2.對object數據類型的排序,主要是採用歸併排序
主要實現方法
private static void mergeSort(Object[] src,
Object[] dest,
int low,
int high,
int off)
以及
private static void mergeSort(Object[] src,
Object[] dest,
int low, int high, int off,
Comparator c)
這兩個,
在歸併過程中如果數組長度小於7,則採用插入排序使數組有序,
否則繼續遞歸歸併,完成排序。