Java中Arrays.Sort方法的运行时间

时间:2014-01-19 17:01:05

标签: java performance

有没有人知道array.sort java方法的大O表示法的运行时间?我的科学博览会项目需要这个。

3 个答案:

答案 0 :(得分:11)

来自官方docs

我发现主要有两种方法。因此,这取决于您正在排序的内容以及您正在调用的sort系列方法中的重载方法。

文档提到原始类型的 ,例如longbyte(例如: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);
}