📜  为什么快速排序比归并排序好?

📅  最后修改于: 2021-09-14 01:37:08             🧑  作者: Mango

这是 DS 面试中的一个常见问题,尽管快速排序在最坏情况下的性能更好,但人们认为快速排序优于归并排序。有某些原因导致快速排序更好,尤其是在数组的情况下:

  1. 辅助空间:合并排序使用额外的空间,快速排序需要很少的空间并表现出良好的缓存局部性。快速排序是一种就地排序算法。就地排序意味着不需要额外的存储空间来执行排序。合并排序需要一个临时数组来合并已排序的数组,因此它不是就地排序,因此快速排序具有空间优势。
  2. 最坏情况:使用随机快速排序可以避免快速排序O(n 2 )的最坏情况。通过选择正确的支点,可以很容易地避免这种情况。通过选择正确的主元元素来获得平均情况下的行为使其提高性能并变得与合并排序一样高效。
  3. 引用的局部性:特别是快速排序表现出良好的缓存局部性,这使其在许多情况下(例如在虚拟内存环境中)比合并排序更快。
  4. 归并排序更适合大型数据结构:归并排序是一种稳定的排序,与快速排序和堆排序不同,它可以很容易地适用于链表和存储在慢速访问介质(如磁盘存储或网络附加存储)上的超大列表.详情请参考这里

排序图像

C++ STL 中存在的std::sort()函数是一种混合排序算法,提供O(nlogn) 的平均和最坏情况时间复杂度。它使用的排序算法称为 Introsort。

Introsort是quicksort 和heapsort 的结合,它从quicksort 开始,如果递归深度超过基于被排序元素数量的级别,则切换到heapsort。

相关文章:为什么数组优先使用快速排序,链接列表优先使用合并排序?

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程