Java中Arrays.sort()實現

對基本類型用的快速排序,對對象類型是歸併排序。
原因可能和穩定性有關。
一般來說,快速排序效率最高,不過快速排序是不穩定的,就是比如說數組中的值相同的兩個整數,排序前和排序的先後順序可能不一致,這對基本類型來說是完全可以接受的。
但對對象類型來說,用戶可能有穩定性方面的要求,於是使用了效率和穩定都能兼顧的歸併排序。
查看源代碼,選取其中一個,對int數組的排序
這裏寫圖片描述
1. 升序
2. 雙基準快速排序法(Dual-Pivot Quicksort),比單基準快速排序快很多
3. 時間複雜度O(nlogn)

·雙基準快速排序Dual-Pivot Quicksort
首先注意幾個重要參數。
對於int數組,byte數組,short or char數組,採用不同的排序方法來實現。
這裏寫圖片描述
對int數組排序:insertionSort 47 quickSort 286 mergeSort
檢查隨機性(Arrays.sort()方法提供檢測數組隨機性的機制:當數組長度大於QUICKSORT_THRESHOLD(286)時,檢測隨機性),如果隨機性比較強,則用quickSort,否則mergeSort
這裏寫圖片描述
對byte數組排序:insertionSort 29 countingSort
對short or char排序:quickSort 3200 countingSort

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章