【问题标题】:Quick sort, Hoare partitioning, using random pivot快速排序,霍尔分区,使用随机枢轴
【发布时间】:2016-07-04 00:17:59
【问题描述】:

除了以下之外,还有没有更好的方法来使用随机枢轴进行快速排序(如果没有交换,我就无法做到)?请指教

int hoare_par (int *a, int b, int e)
{
    if (b < e) {
        int p_i = __random(b, e);
        __swap(&a[b], &a[p_i])

        int p = a[b];
        b = b - 1;
        e = e + 1;

        while (1) {
            do { ++b;} while (a[b] < p);
            do { --e;} while (a[e] > p);
            if (b < e)
                 __swap( &a[b], &a[e]);
            else
                 return e;
        }
    }
    return e;
}

另外,如果不正确,请告诉我。谢谢!

【问题讨论】:

  • 不想粗鲁,但如果您不研究快速排序并且没有测试代码的正确性,我们为什么要关心?
  • 我在最后进行了测试,也进行了研究。但是,是的,上述实现可能不如您的正确,我的研究可能不如您的。
  • 我指的是“另外,如果不正确,请告诉我。”但如果你做你的研究,对我来说没问题。无论如何,我想不出比你更好的解决方案。

标签: quicksort hoare-logic


【解决方案1】:

如果您查看 Wikipedia 的 article 并研究那里给出的 Hoare 分区伪代码,您会发现所有分区方案关心的是所选枢轴在范围内的某个位置(它充当哨兵以避免超出两个索引的范围)。因此,您可以随机选择该范围内的任何元素作为枢轴元素,并按照那里记录的方式进行分区。

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多