【问题标题】:Median of three (mean) in quicksort?快速排序中三个(平均值)的中位数?
【发布时间】:2020-08-09 07:06:00
【问题描述】:

尽管阅读了这篇文章,但我似乎无法理解这是如何工作的 - median of three values strategy

我知道在快速排序中,我可以选择一个任意值作为我的支点并从那里开始。对于三个快速排序的中位数,网上有文章说在未排序的数组中选择第一个、最后一个和中间的值,然后选择这三个值的中心值(例如 56、12、45 -45 将是挑选)。该示例还显示了 9 个值,便于选择第一个、最后一个和中间值。

如果未排序的数组只有34, 66, 57, 45, 20, 98, 92, 41 这样的8 个值怎么办?考虑到第一个、最后一个和中间值分别是 34, 45, 41,我的中值是否会是 45

谢谢。

【问题讨论】:

    标签: algorithm sorting quicksort


    【解决方案1】:

    如果第一个、最后一个和中间值分别为 34、45、41,我的中值是否会是 45?

    它将是 41,因为这是这三个数字的中位数。

    一般来说,该方法是根据某种方案选择三个数字,并以中位数作为当前枢轴。

    如果选择第一个、中间和最后一个的中位数,则需要考虑一些技术细节,例如偶数大小的数组(如您的示例中)、大小小于 3 的数组等。您在那里做的任何合理选择会好的。

    【讨论】:

    • 谢谢阿米。我不太明白你提到的这句话(so this method affects the current pivot and next ones each step)。这是否意味着枢轴将始终为 41?就正常的快速排序而言,枢轴发生了变化。
    • @user3118602 我删除了它 - 它只是增加了混乱。请忽略这一点。
    • @user3118602 - 当中位数为 3 时,由于比较的值已经在缓存中,如果乱序它们可以选择交换,所以在这种情况下,在中位数为 3 之后,{first, middle , 最后} = {35, 41, 45}。
    猜你喜欢
    • 2018-11-27
    • 2014-08-23
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多