在Java中,方法Arrays.sort
有两个重载(在本文中,我对此很感兴趣),一个重载用于基本类型,另一个重载用于引用类型。他们使用不同的排序算法。
如何使用用于引用类型的算法对原始类型进行排序(既不使用列表也不将它们转换为引用类型)
方法Arrays.sort(int[])
使用Dual-Pivot Quicksort。
方法Arrays.sort(Object[])
使用TimSort。
如果我有int[] array = { /* some values here */ };
,如何使用TimSort对其进行排序?
(我知道使用Integer[] array = { /* some values here */ };
将使用TimSort,但由于使用对象而不是原始数据会产生开销,因此我不希望这样做,以后可能会有一些装箱和拆箱)
还是在原始数据上使用TimSort不切实际?
我为TimSort java.util.TimSort找到了一个类,但是无法在代码中访问它。
出现此问题的原因是Quicksort的O(n^2)
情况最糟,我遇到了利用该情况的数组。而TimSort的(n log(n))
情况最糟,而O(n)
的情况最糟。
最佳答案
Java内置的TimSort
和ComparableTimSort
不适用于原始数据类型的数组,它只是sort方法需要对象数组
static void sort(Object[] a, int lo, int hi, Object[] work, int workBase, int workLen);
虽然
DualPivotQuicksort
具有用于原始类型的排序方法,例如:static void sort(char[] a, int left, int right,
char[] work, int workBase, int workLen);
static void sort(int[] a, int left, int right,
int[] work, int workBase, int workLen);
更新。尽管这不是关于
Arrays.sort
的原始问题的答案,但geeksforgeeks具有针对c ++ / java / python3 / c#的timsort实现。 Java的方法原型是:public static void timSort(int[] arr, int n);
关于java - 如何在原始数据类型数组上调用Java内置TimSort,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60704997/