【问题标题】:Quicksort Hoare's partitionQuicksort Hoare 的分区
【发布时间】:2020-10-25 05:59:02
【问题描述】:
algorithm quicksort(A, lo, hi) is
    if lo < hi then
        p := partition(A, lo, hi)
        quicksort(A, lo, p)
        quicksort(A, p + 1, hi)

algorithm partition(A, lo, hi) is
    pivot := A[⌊(hi + lo) / 2⌋]
    i := lo - 1
    j := hi + 1
    loop forever
        do
            i := i + 1
        while A[i] < pivot
        do
            j := j - 1
        while A[j] > pivot
        if i ≥ j then
            return j
        swap A[i] with A[j]

我试图在Quicksort/Hoare_partition_scheme 中找到以下问题的明确答案,但我无法找到,尽管手动尝试了一些示例表明以下内容很可能是正确的...... 我的问题是,它是否总是可以保证

  • partition 返回所选枢轴的位置
  • 返回ij 是否重要,或者说算法停在i==j
  • quicksort 中调用是(lo,p-1) and (p,hi) 还是(lo,p) and (p+1,hi) 是否重要

【问题讨论】:

    标签: algorithm sorting quicksort


    【解决方案1】:

    第一个问题的答案在链接的文章中:

    在这个方案中,枢轴的最终位置不一定在 返回的索引,作为枢轴和等于枢轴的元素 可以在分区步骤之后在分区内的任何位置结束。

    一个简单的例子是对数组 [2,0,1,3,4] 进行分区。

    轴心为 1。
    i 将停在 2。
    j 将停在 1。
    交换后数组为[1,0,2,3,4]。
    i会再次移动到2。
    j会移动到0,0的位置将被退回。

    该示例数组也回答了第二个问题。分区后j为1,i为2。

    要回答第三个问题,我认为您需要做的就是交换初始数组中的 2 和 3。

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 2020-09-20
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多