快速排序,Hoare分区,使用随机数据透视

时间:2016-07-04 00:18:00

标签: quicksort hoare-logic

除了下面之外,是否有更好的方法使用随机数据进行快速排序(我不能没有交换)?请指教

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;
}

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

1 个答案:

答案 0 :(得分:1)

如果您浏览Wikipedia的article并研究那里给出的Hoare分区的伪代码,您会发现所有分区方案都关心的是所选枢轴在范围内的某个位置(用作一个哨兵,以避免两个索引都超出范围)。因此,您可以随机选择范围内的任何元素作为枢轴元素,并按照此处写下的内容进行分区。

相关问题