Collections.Sort在后续排序上的表现?

时间:2011-10-21 01:32:12

标签: java performance sorting

我正在使用Collections.sort自定义比较器类。我听说这有O(N log N)运行时复杂性。我很想知道当集合没有改变时后续排序会发生什么。

例如,假设我有一个Egg s的ArrayList,每个都有一个近似size字段(我的比较器按其排序)。如果我在阵列列表中插入十个鸡蛋并对其进行排序,我可以预计它会花费O(N log N)时间。

如果我再次对其进行排序,而不添加,删除或更改任何元素,它还需要N log N时间吗?

4 个答案:

答案 0 :(得分:2)

Javadoc表示'如果低子列表中的最高元素小于高子列表中的最低元素,则省略合并'。这似乎意味着什么都没有发生,所以应该更快。

你总是可以测试它。

答案 1 :(得分:1)

我还没有分析当前sun java库中的代码。但是,javadoc声明使用了合并排序。大多数合并排序在已排序的集合上产生O(n)性能。虽然文档中没有说明这一点。我的个人经历表明我在排序或近乎排序的列表上表现非常出色。

答案 2 :(得分:0)

Per JavaDoc Collections.sort使用合并排序算法。

你可以在这里看到它是如何做的 - > http://www.sorting-algorithms.com/

答案 3 :(得分:0)

要扩展EJP的答案,如果文档指出合并传递是跳过的步骤,那么在这种最佳情况下运行时将是LG N,因为它仍然会将列表分解为LG N子问题。与线性扫描的乘法是效率的提高。