为什么Java impl选择合并排序而不是快速排序?他们为什么将内容复制到数组?
API:“排序算法是一种改进的mergesort(如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法可确保n log(n)性能。此实现将指定的列表转储到数组中,对数组进行排序,然后遍历列表,从数组中的对应位置重置每个元素,从而避免了尝试对链表进行排序时产生的n2 log(n)性能。 ”
最佳答案
Java专家将平均情况与最坏情况进行了交易,您可能知道,在最坏情况下,快速排序可能在O(n ^ 2)中运行。
您可以阅读API,就地对链表进行排序更为复杂n ^ 2log(n)
合并排序是稳定的,对于快速排序的有效版本而言并非如此。
(这在排序对象时可能非常重要,许多程序员在使用Collections.sort()时将其视为理所当然的)