首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 14+ Arrays.sort( int[] )最坏的时间复杂度是什么?

Java 14+ Arrays.sort( int[] )最坏的时间复杂度是什么?
EN

Stack Overflow用户
提问于 2022-03-16 12:03:07
回答 1查看 151关注 0票数 2

虽然我知道这似乎是显而易见的,但我会解释我的困惑。我一直认为快速排序的最坏情况时间复杂度是O(n^2)。[Arrays.sort(int[])](https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Arrays.html#sort(int%5B%5D%29)从Java 7到Java 13的文档说:该算法在上提供O(n log(n))性能--许多数据集导致其他快速数据集退化为二次性能,并且通常比传统的(单轴)快速排序实现更快。

这里的关键字是“多”,所以我假设这里的O(n log(n))指的是平均情况,而且仍然存在导致O(n^2)最坏情况的数据集。

但是在Java14和更高版本中,[Arrays.sort(int[])](https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Arrays.html#sort(int%5B%5D%29)的文档说:该算法在所有数据集上提供O(n (N))性能。

那么,对于现在改进的快速排序实现O(n log(n))来说,最坏的情况是什么呢?谁来澄清一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-16 12:36:01

您需要检查Arrays.sort(int[])的更深层次的实现。

在里面有一个函数DualPivotQuicksort.sort(.)是用来分类的。

在java 7到13中,您可以看到函数有一种故障安全机制,在复杂度接近O(n^2)时,它会更改排序类型,它正在更改为QuickSort,平均复杂度为O(n log ),但最糟糕的是O(n^2),这就是为什么javaDoc描述中说“许多数据集”。

另一方面,由于java 14由于复杂度较高而安全失败,所以将排序算法改为堆排序算法,而堆排序算法的复杂度为O(n log ),因此它永远不会比这慢。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71496763

复制
相关文章

相似问题

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