除了下面之外,是否有更好的方法使用随机数据进行快速排序(我不能没有交换)?请指教
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;
}
另外,如果不正确,请告诉我。谢谢!
答案 0 :(得分:1)
如果您浏览Wikipedia的article并研究那里给出的Hoare分区的伪代码,您会发现所有分区方案都关心的是所选枢轴在范围内的某个位置(用作一个哨兵,以避免两个索引都超出范围)。因此,您可以随机选择范围内的任何元素作为枢轴元素,并按照此处写下的内容进行分区。