Реализацията на сортиране чрез сливане на Java 6 в Arrays.java
използва сортиране чрез вмъкване, ако дължината на масива е по-малка от някакъв праг. Тази стойност е твърдо кодирана на 7. Тъй като алгоритъмът е рекурсивен, това в крайна сметка се случва много пъти за голям масив. Каноничният алгоритъм за сортиране чрез сливане не прави това, а просто използва сортиране чрез сливане докрай надолу, докато остане само 1 елемент в списъка.
Това оптимизация ли е? Ако е така, как би трябвало да помогне? И защо 7
? Сортирането чрез вмъкване (дори на <=7
неща) увеличава драстично броя на сравненията, необходими за сортиране на голям масив - така че ще добави разходи за сортиране, при което compareTo()
извикванията са бавни.
(оста x е size of array
, оста y е # of comparisons
, за различни стойности на INSERTIONSORT_THRESHOLD
)