11
为什么实践中quicksort比其他排序算法更好?
在标准的算法当然我们被教导快速排序是平均和ø (Ñ 2)在最坏的情况下。同时,还研究了其他排序算法,它们在最坏的情况下为O (n log n )(例如mergesort和heapsort),在最坏的情况下甚至是线性时间(例如bubbleort),但还有一些额外的内存需求。Ø (ñ 日志n )O(nlogn)O(n \log n)Ø (ñ2)O(n2)O(n^2)Ø (ñ 日志n )O(nlogn)O(n \log n) 快速浏览一下更多的运行时间后,自然可以说quicksort 应该不如其他高效。 另外,考虑到学生在基础编程课程中学习到,递归通常并不太好,因为它会占用过多的内存,等等。因此(尽管这不是一个真正的论点),但这样的想法是快速排序可能不是真的很好,因为它是一种递归算法。 那么,为什么在实践中快速排序优于其他排序算法?它与真实数据的结构有关吗?它与计算机中内存的工作方式有关吗?我知道有些记忆要比其他记忆快,但是我不知道这是否是这种违反直觉的表现的真正原因(与理论估计相比)。 更新1:一个规范的答案是说,平均情况的所涉及的常数小于其他O (n log n )算法所涉及的常数。但是,我还没有看到用正确的计算代替仅凭直觉的想法的适当理由。Ø (ñ 日志n )O(nlogn)O(n\log n)Ø (ñ 日志n )O(nlogn)O(n\log n) 无论如何,正如某些答案所暗示的那样,似乎真正的区别发生在内存级别,在这种级别上,实现利用了计算机的内部结构,例如使用高速缓存比RAM快。讨论已经是有趣的,但我还是喜欢看关于内存管理更详细,因为它似乎是在回答有什么关系。 更新2:有几个网页提供了排序算法的比较,其中有些比其他网页更出色(最著名的是sorting-algorithms.com)。除了提供不错的视觉辅助外,这种方法也无法回答我的问题。
308
algorithms
sorting