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