这是Janoma对cs.SE的一个问题的转贴。对他或CS SE的全部荣誉和破坏。
在标准算法课程中,我们学会了快速排序平均为O(n log n),在最坏情况下为O(n²)。同时,还研究了其他排序算法,它们在最坏的情况下为O(n log n)(例如mergesort和heapsort),在最坏的情况下甚至是线性时间(例如bubbleort),但还有一些额外的内存需求。
快速浏览一下更多的运行时间后,自然可以说quicksort 应该不如其他高效。
另外,考虑到学生在基础编程课程中学习到,递归通常并不太好,因为它会占用过多的内存,等等。因此(尽管这不是一个真正的论点),但这样的想法是快速排序可能不是真的很好,因为它是一种递归算法。
那么,为什么在实践中快速排序优于其他排序算法?它与真实数据的结构有关吗?它与计算机中内存的工作方式有关吗?我知道有些记忆要比其他记忆快,但是我不知道这是否是这种违反直觉的表现的真正原因(与理论估计相比)。