algorithm - 为什么 QuickSort 不擅长对几乎已排序的数据进行排序

标签 algorithm sorting time-complexity big-o quicksort

<分区>

为什么 QuickSort 在对几乎已排序的数据进行排序时表现不佳?相比之下,为什么插入排序更好?试图理解大 O 符号!

最佳答案

根据枢轴的选择,您的陈述对于 QS 的某些变体是正确的。 QS 性能取决于旋转操作,将数据划分为大小大致相等的 block ,然后分别对这些 block 进行排序。如果主元是数据的最小值或最大值,或者表示高或低百分位数,则主元运算会将数据分为两部分,其中大部分数据位于两者之一中,但仍需要对其进行排序。如果选择数据的第一个元素作为主元,并且对数据进行排序,则会发生这种最坏情况。通过仅选择一个随机元素作为基准,最坏情况发生的可能性可以忽略不计。这与最坏情况分析无关,但平均而言(在可能的枢轴上,最坏情况下输入)或在实践中这会产生良好的性能。

关于algorithm - 为什么 QuickSort 不擅长对几乎已排序的数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53734024/

相关文章:

c - 递归如何在二叉搜索树中工作?

c++ - 算法 forward_list 是排序的?

javascript - 通过包含在另一个数组中的对象属性对 Javascript 数组进行排序

c++ - 以下代码片段的算法复杂度

algorithm - 在解决递归问题时,地板和天花板何时重要?

algorithm - 插入排序分析和求和符号

algorithm - 这是输入大小的运行时间多项式吗?

java - Java Queue Implementation中pop如何在O(1)中执行?

java - 如何将数字换行?

algorithm - 如何按大小对数字进行分组