algorithm - 在 QuickSort 中选择一个枢轴

标签 algorithm sorting quicksort

我正在阅读有关 QuickSort 的文章,看起来理想情况下,他们使用随机算法来选择至少有 25-75 个数组拆分的主元。 为什么他们不能计算数组的中值并在每次递归调用中选择最接近中值的值?

我认为它会花费相同的运行时间,甚至可能比随机方法更好。

最佳答案

使用中位数的中位数,可以选择接近中位数,但开销很大,有效地对 5 组进行排序。Wiki 文章:

https://en.wikipedia.org/wiki/Median_of_medians

请注意,中位数的中位数可以就地实现。

对于随机主元,计算随机索引的代码会在分区步骤中占用大量时间。

一种更简单的方法是使用 first、middle、last 的中位数,以避免已排序或反向排序数据的最坏情况时间,正如 yeputons 所回答的那样,使用切换到堆排序的 introsort(基于递归级别) 以避免最坏的情况发生。

关于algorithm - 在 QuickSort 中选择一个枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50917333/

相关文章:

algorithm - 互斥算法仅使用原子读写来处理未知数量的进程,并且对进程中止具有鲁棒性

c++ - 使用指向数组的指针进行合并排序

python - 查找两个字符串之间的匹配百分比,同时考虑单词的顺序 - Python

用指针对二维数组进行排序的代码

javascript - JavaScript中根据多值特征重新组织多维数组?

c# - 转换链表

ios - 对数组进行排序,其中包含日期,月份

c - 快速排序并不是每次都排序

c - C中的快速排序实现

c++ - 我不明白这个快速排序的实现