В java, метод Arrays.sort
имеет две перегрузки (которые меня интересуют в этом посте), одна для примитивных типов, а другая для ссылочных типов. Они используют разные алгоритмы сортировки.
Как я могу использовать алгоритм, используемый для ссылочных типов, для сортировки примитивных типов (без преобразования их в ссылочные типы и без использования списков)
Метод Arrays.sort(int[])
использует Dual-Pivot Быстрая сортировка .
Метод Arrays.sort(Object[])
использует TimSort .
Если я есть int[] array = { /* some values here */ };
, как я могу отсортировать его с помощью TimSort? (Я знаю, что при использовании Integer[] array = { /* some values here */ };
будет использоваться TimSort, но я не хочу этого из-за накладных расходов, связанных с использованием Objects вместо примитивных данных, и, возможно, позже будут происходить некоторый бокс и распаковка)
Или это неэффективно для использовать TimSort для примитивных данных?
Я нашел класс для TimSort java .util.TimSort , но не смог получить к нему доступ в своих кодах.
причина этого вопроса в том, что у Quicksort наихудший случай O(n^2)
, и я столкнулся с массивом, который использовал этот случай. В то время как TimSort имеет худший случай (n log(n))
и лучший случай O(n)
ОБНОВЛЕНИЕ:
Я на самом деле заинтересован просто иметь встроенный метод для TimSort, он не должно быть Arrays.sort
. Если есть какой-либо другой встроенный метод для сортировки примитивных типов данных с использованием TimSort, то это полностью приветствуется.