Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在基本数据类型数组上调用java内置的TimSort_Java_Sorting_Quicksort_Timsort - Fatal编程技术网

如何在基本数据类型数组上调用java内置的TimSort

如何在基本数据类型数组上调用java内置的TimSort,java,sorting,quicksort,timsort,Java,Sorting,Quicksort,Timsort,在java中,该方法有两个重载(我在本文中感兴趣),一个用于基本类型,另一个用于引用类型。他们使用不同的排序算法 如何使用用于引用类型的算法对基本类型进行排序(不使用列表将它们转换为引用类型) 该方法使用双枢轴 该方法使用 如果我有一个int[]数组={/*这里有一些值*/},如何使用TimSort对其进行排序? (我知道使用Integer[]array={/*此处的一些值*/};将使用TimSort,但我不希望这样做,因为使用对象而不是原始数据会带来开销,而且以后可能会有一些装箱和拆箱) 或者

在java中,该方法有两个重载(我在本文中感兴趣),一个用于基本类型,另一个用于引用类型。他们使用不同的排序算法

如何使用用于引用类型的算法对基本类型进行排序(不使用列表将它们转换为引用类型)

该方法使用双枢轴

该方法使用

如果我有一个
int[]数组={/*这里有一些值*/},如何使用TimSort对其进行排序?
(我知道使用
Integer[]array={/*此处的一些值*/};
将使用TimSort,但我不希望这样做,因为使用对象而不是原始数据会带来开销,而且以后可能会有一些装箱和拆箱)

或者对原始数据使用TimSort不是很有效吗

我为TimSort找到了一个类,但在代码中无法访问它

这个问题的原因是Quicksort的最坏情况是
O(n^2)
,我遇到了一个数组,它利用了这个情况。而TimSort的最坏情况是
(n log(n))
,最好情况是
O(n)

更新:


实际上,我只对TimSort的内置方法感兴趣,它不需要是
Arrays.sort
。如果有任何其他内置方法可以使用TimSort对基本数据类型进行排序,这是完全受欢迎的。

java内置
TimSort
ComparableTimSort
不适用于基本数据类型的数组,它唯一的排序方法需要对象数组

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
的原始问题的答案,但它实现了timsort for c++/java/python3/c#。java的方法原型是:

public static void timSort(int[] arr, int n);

java内置的
TimSort
CompariableTIMSORT
不适用于基本数据类型的数组,它是唯一的排序方法,需要对象数组

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
的原始问题的答案,但它实现了timsort for c++/java/python3/c#。java的方法原型是:

public static void timSort(int[] arr, int n);


你能展示你面对的利用O(n^2)的数组吗?“你是怎么面对它的呢?”希波弗罗夫肯定。我在编程培训网站()中提交了一个问题代码,该算法肯定是正确的,但是我的代码的第四次测试使用int[]超出了允许的时间。输入数组太长(200000个元素),网站无法查看所有数组(仅72个)。您可以在页面底部看到案例,其中有一个“单击查看测试详细信息”,使用整数[]已被接受。嗯,很有趣。我高度怀疑问题设定者故意为特定排序算法创建了最坏情况顺序,并且应该很难无意中创建一个最坏情况顺序。所以我不相信这是真的。但是这个测试用例看起来并不是随机的,所以我认为对于快速排序来说,它可能不是一个特别糟糕的案例,而对于Timsort来说,它可能是一个特别好的案例。如果看不到完整的数据,很难说。好的,我得到了
int
版本,只需以不同的方式存储数字即可轻松接受:
contents[(I+123456)%contestCount]=in.nextInt()
。所以我猜输入确实对Java的快速排序特别不利。我发现了一些链接,这些链接说这是非常有意的:,,我在测试用例中注意到了这种模式:低值,高值,高值,增加1,两个相邻模式之间的差值增加一个模式是恒定的
4
例如:199995 199996。。。。199991 199992你能展示你面对的利用O(n^2)的数组吗?“你是怎么面对它的呢?”希波弗罗夫肯定。我在编程培训网站()中提交了一个问题代码,该算法肯定是正确的,但是我的代码的第四次测试使用int[]超出了允许的时间。输入数组太长(200000个元素),网站无法查看所有数组(仅72个)。您可以在页面底部看到案例,其中有一个“单击查看测试详细信息”,使用整数[]已被接受。嗯,很有趣。我高度怀疑问题设定者故意为特定排序算法创建了最坏情况顺序,并且应该很难无意中创建一个最坏情况顺序。所以我不相信这是真的。但是这个测试用例看起来并不是随机的,所以我认为对于快速排序来说,它可能不是一个特别糟糕的案例,而对于Timsort来说,它可能是一个特别好的案例。如果看不到完整的数据,很难说。好的,我得到了
int
版本,只需以不同的方式存储数字即可轻松接受:
contents[(I+123456)%contestCount]=in.nextInt()
。所以我猜输入确实对Java的快速排序特别不利。我发现了一些链接,这些链接说这是非常有意的:,,我在测试用例中注意到了这种模式:低值,高值,高值,增加1,两个相邻模式之间的差值增加一个模式是恒定的
4
例如:199995 199996。。。。199991 199992虽然我找不到,但在java库的其他地方可能还有其他一些接受原语的实现(我希望如此)。如果没有找到这样的方法,我将等待其他答案,然后再将您的答案标记为解决方案。实际上,我只对TimSort的内置方法感兴趣,它不需要是Arrays.sort。如果有任何其他内置方法可以使用TimSort对基本数据类型进行排序,那么它是完全受欢迎的。我将更新这篇文章来澄清这一点。你的意思是:内置于jdk/jre中吗?对。java提供的方法,而不是我在找不到时编写(或复制粘贴)的方法,但ja中的其他地方可能有其他实现