有没有人知道array.sort java方法的大O表示法的运行时间?我的科学博览会项目需要这个。
答案 0 :(得分:11)
来自官方docs
我发现主要有两种方法。因此,这取决于您正在排序的内容以及您正在调用的sort
系列方法中的重载方法。
文档提到原始类型的 ,例如long
,byte
(例如:static void sort(long[])
):
排序算法是一个改编的快速排序,改编自Jon L. Bentley和M. Douglas McIlroy"设计排序函数", 软件实践与经验,卷。 23(11)P。1249-1265(11月 1993年)。该算法在许多数据集上提供n * log(n)性能 导致其他快速降级降级为二次性能。
对象类型:(例如:void sort(Object list[])
)
保证O(nlogn)表现
排序算法是一个经过修改的mergesort(其中合并为 如果低子列表中的最高元素小于 高子列表中的最低元素)。该算法提供保证 n * log(n)表现。
希望有所帮助!
答案 1 :(得分:3)
Arrays.sort()
使用Tim sort
- O(N log N)表示对象数组,QuickSort
表示原语数组 - 再次为O(N log N)。
以下是排序算法的精彩比较:http://www.sorting-algorithms.com/
答案 2 :(得分:0)
我已经在各种数据集中测试了 Arrays.sort() 的时间复杂度。在最坏的情况下,时间复杂度为 O(n^2)。 尝试使用 Arrays.sort() 然后使用 Collections.sort() 来做这个问题。你会看到不同之处。 Question link 当我使用 Arrays.sort() 时,它花了超过 2 秒。 当我使用 collections.sort() 时花了 0.2 秒 Collections.sort() 使用修改后的归并排序,而 Arrays.sort() 使用 QuickSort()。如果您使用的是 Array,下面的代码是在 Java 中排序的最佳方式。如果是列表,您可以默认使用 Collections.sort()。
static void sort(long[] a) {
ArrayList<Long> l=new ArrayList<>();
for (long i:a) l.add(i);
Collections.sort(l);
for (int i=0; i<a.length; i++) a[i]=l.get(i);
}