java.util.Arrays.sort方法簡單分析

今天比較仔細的觀察了下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,則採用插入排序使數組有序,

否則繼續遞歸歸併,完成排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章