Поскольку с момента последнего ответа в этой теме прошло некоторое время, вот некоторые обновления ...
Это зависит от сложности и его соответствия размеру массива плюс вероятности, когда java исследовал эти алгоритмы и просто решил в зависимости от измерений и тестов.
Согласно JAVA JDK 1.8 DOCS самоочевидно, где он выбирает алгоритм, а не
только один, но до четырех на выбор в соответствии с некоторыми пороговыми значениями ...
/**
* If the length of an array to be sorted is less than this
* constant, Quicksort is used in preference to merge sort.
*/
private static final int QUICKSORT_THRESHOLD = 286;
/**
* If the length of an array to be sorted is less than this
* constant, insertion sort is used in preference to Quicksort.
*/
private static final int INSERTION_SORT_THRESHOLD = 47;
/**
* If the length of a byte array to be sorted is greater than this
* constant, counting sort is used in preference to insertion sort.
*/
private static final int COUNTING_SORT_THRESHOLD_FOR_BYTE = 29;
/**
* If the length of a short or char array to be sorted is greater
* than this constant, counting sort is used in preference to Quicksort.
*/
private static final int COUNTING_SORT_THRESHOLD_FOR_SHORT_OR_CHAR = 3200;
Ссылка Java DOC JDK 8
Это событие развилось, чтобы использовать параллельную сортировку
Сортировка в Java
Java 8 поставляется с новым API - parallelSort - с сигнатурой, аналогичной Arrays.sort()
API:
@Test
public void givenIntArray_whenUsingParallelSort_thenArraySorted() {
Arrays.parallelSort(toSort);
assertTrue(Arrays.equals(toSort, sortedInts));
}
За кулисами parallelSort () он разбивает массив на различные подмассивы (согласно гранулярности в алгоритме параллельной сортировки). Каждый подмассив сортируется с помощью Arrays.sort () в разных потоках, так что сортировка может выполняться параллельно и окончательно объединяются в отсортированный массив.
Обратите внимание, что общий пул ForJoin используется для выполнения этих параллельных задач и затем объединения результатов.
Результат Arrays.parallelSort будет таким же, как и у Array. Конечно, это просто вопрос использования многопоточности.
Наконец, в Arrays.parallelSort также есть похожие варианты API Arrays.sort:
Arrays.parallelSort (int [] a, int fromIndex, int toIndex);
Резюме :
Так как Java API развивается вместе с HardWare и программным обеспечением в целом
есть больше пользы для многопоточности и настройки здесь и там
на порогах и алгоритмах.