Зачем использовать два разных алгоритма для сортировки массивов?

В классе Arrays быстрая сортировка используется для сортировки примитивов, но для сортировки объектов она объединяет сортировку.

Интересно, почему это так?

Ответ 1

Причиной использования mergesort является то, что они хотят стабильный алгоритм - например, где равные объекты (на compareTo() или compare()) находятся в том же относительном порядке, что и раньше.

Для примитивов равенство подразумевает "недифференцируемость". При сортировке {5, 3, 5} до {3, 5, 5} неважно, какой из пяти был первым. Поэтому мы можем использовать более быстрый (и нестабильный) алгоритм быстрой сортировки здесь.

Ответ 2

Догадка, но quicksort - это O (n ^ 2) в худшем случае, тогда как сортировка слияния стабильна (гарантируется O (n log n)).

Худший случай для быстрой сортировки запускается равными значениями.. и равные примитивы идентичны, а "равные" объекты могут не быть.