Почему Java 6 Arrays # sort (Object []) изменяется с сортировки слиянием на сортировку слиянием для небольших массивов?

Реализация сортировки слиянием в Java 6 в Arrays.java использует сортировку вставкой, если длина массива меньше некоторой порог. Это значение жестко задано равным 7. Поскольку алгоритм является рекурсивным, в конечном итоге это происходит много раз для большого массива. Канонический алгоритм сортировки слиянием не делает этого, просто использует сортировку слиянием до тех пор, пока в списке не останется только 1 элемент.

Это оптимизация? Если да, то как это должно помочь? А почему 7 ? Сортировка вставкой (даже элементов) резко увеличивает количество сравнений, требуемых для сортировки большого массива, поэтому добавит затраты на сортировку, где вызовы compareTo () выполняются медленно .

array-size vs #-of-comparisons for different values of INSERTIONSORT_THRESHOLD

(ось абсцисс - размер массива , ось ординат - количество сравнений , для разных значений INSERTIONSORT_THRESHOLD )

22
задан Matthew Gilliard 11 July 2011 в 14:42
поделиться