Реализация сортировки слиянием Java 6 в Arrays.java
использует сортировку вставками, если длина массива меньше некоторого порога. Это значение жестко запрограммировано на 7. Поскольку алгоритм является рекурсивным, в конечном итоге это происходит много раз для большого массива. Канонический алгоритм сортировки слиянием этого не делает, он просто использует сортировку слиянием. вниз, пока в списке не останется только 1 элемент.
Это оптимизация? Если да, то как это должно помочь? А почему 7
? Сортировка вставками (даже <=7
вещей) значительно увеличивает количество сравнений, необходимых для сортировки большого массива, поэтому увеличивает стоимость сортировки, где compareTo()
вызовы выполняются медленно.
(ось X — size of array
, ось Y — # of comparisons
, для разных значений INSERTIONSORT_THRESHOLD
)