首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对原始数据类型数组调用java内置TimSort

如何对原始数据类型数组调用java内置TimSort
EN

Stack Overflow用户
提问于 2020-03-16 19:19:17
回答 1查看 252关注 0票数 1

在java中,方法Arrays.sort有两个重载(在这篇文章中我很感兴趣),一个是用于原始类型的,另一个是用于引用类型的。它们使用不同的排序算法。

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

方法Arrays.sort(int[])使用双轴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)情况

更新:

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

EN

回答 1

Stack Overflow用户

发布于 2020-03-16 23:43:38

java内置的TimSortComparableTimSort不能处理原始数据类型的数组,它唯一的排序方法需要对象数组

代码语言:javascript
复制
static void sort(Object[] a, int lo, int hi, Object[] work, int workBase, int workLen);

DualPivotQuicksort具有用于原语类型的排序方法,例如:

代码语言:javascript
复制
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的方法原型是:

代码语言:javascript
复制
public static void timSort(int[] arr, int n);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60704997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档