Arrays.sort()
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
进入到方法内里面有
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}
可以发现如果数组的长度小于QUICKSORT_THRESHOLD
的话就会使用这个DualPivotQuicksort方法,而这个值是286。
那如果大于286呢,它就会坚持数组的连续升序和连续降序性好不好,如果好的话就用归并排序,不好的话就用快速排
回到DualPivotQuicksort方法上再点进去
if (length < INSERTION_SORT_THRESHOLD)
有这样一条判断,
即如果数组长度小于INSERTION_SORT_THRESHOLD
(值为47)的话,那么就会用插入排序了,不然再用DualPivotQuicksort。
总结:
如果数组长度大于等于286且连续性好的话,就用归并排序,如果大于等于286且连续性不好的话就用DualPivotQuicksort排序。
如果长度小于286且大于等于47的话就用DualPivotQuicksort排序,如果长度小于47的话就用插入排序。