Java 主要排序方法为 java.util.Arrays.sort()
,粗略的来讲,对于基本数据类型使用双轴快排,对于引用类型使用归并排序。接下来我们深入 Arrays.sort
的源码,更具体的分析其中所使用的排序算法。
Arrays.sort底层
一开始会判断数组是否是小数组(元素个数小于286),是则使用快速排序。
static void sort(int[] a, int left, int right,
int[] work, int workBase, int workLen) {
// Use Quicksort on small arrays 对小数组使用快速排序
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}
但其实也并不是直接就开始使用快速排序,点进 sort(a, left, right, true)
看,会发现元素个数小于47的极小数组,会使用插入排序。
private static void sort(int[] a, int left, int right, boolean leftmost) {
int length = right - left + 1;
// Use insertion sort on tiny arrays 对极小数组使用插入排
if (length < INSERTION_SORT_THRESHOLD) {
if (leftmost) {
for (int i = left, j = i; i < right; j = ++i) {
int ai = a[i + 1];
while (ai < a[j]) {
a[j + 1] &