【发布时间】:2011-03-23 19:20:59
【问题描述】:
为什么 Java impl 选择合并排序而不是快速排序?为什么他们将内容复制到数组中?
API:“排序算法是一种修改过的合并排序(如果低位子列表中的最高元素小于高位子列表中的最低元素,则忽略合并)。该算法提供有保证的 n log(n) 性能. 这个实现将指定的列表转储到一个数组中,对数组进行排序,然后迭代列表,从数组中的相应位置重置每个元素。这避免了尝试对链表进行排序导致的 n2 log(n) 性能到位。”
【问题讨论】:
-
@Johannes ...教训是实现细节发生了变化。也可能是其中一个或两个 javadocs 中的材料已过期。
-
@Stephen C:如果记录在案,尤其是在性能保证方面,则不是实现细节。
-
@Thomas 我同意,性能保证不能是实现细节。但是算法可以。
-
@Thomas - 那么你如何与@Johannes 所说的关于集合排序从 Java 6 到 Java 7 的变化相协调呢?他们可以并且确实会更改实现细节……即使它们已记录在 javadocs 中。
-
@NoozNooz42 - Java 平台默认执行并行排序是个坏主意。如果您的平台不是多核野兽怎么办?如果您不想要排序以使用所有可用内核怎么办?如果集合太小而无法并行排序怎么办?如果您希望您的应用程序使用并行排序,只需使用第三方库...