我运行了一些测试,发现快速排序实际上运行速度越慢,列表排序越多,这是非常直观的!我已经阅读了维基百科上的快速排序算法但我不太明白为什么需要更长时间的列表排序越多。任何帮助将不胜感激!
答案 0 :(得分:3)
非随机化快速排序通常会选择第一个元素作为枢轴元素;当列表已经排序时,这将导致列表被拆分为空的左侧列表和包含 n-1 元素的右侧列表。每次递归调用都会发生相同的行为,总运行时间为 n + n-1 + n-2 + .. 。+ 1 = O(n ^ 2)。
答案 1 :(得分:1)
您所指的是QuickSort的一个众所周知的问题。解决这个问题的一种方法是使用第一个元素作为枢轴元素。
此StackExchange条目通常在QuickSort上写得非常好:https://cs.stackexchange.com/questions/3/why-is-quicksort-better-than-other-sorting-algorithms-in-practice
本文更加深入,并讨论了已排序列表的问题以及实现QuickSort的方法,这些方法可以解决这种异常现象。 http://www.csie.ntu.edu.tw/~b93076/p847-sedgewick.pdf