如果我们已经得到一个随机数组,为什么要使用随机快速排序?

时间:2013-11-01 22:22:10

标签: random runtime code-analysis quicksort

为什么使用随机快速排序,如果我们已经得到一个随机数组?

如果我们收到一个随机数组,并且每次选择最后一个条目作为数据透视表, 因为我们收到了一个随机数组,我们甚至不知道它们所在的每个条目位置,所以这仍然不被认为是随机的。

常规快艇的PSEUDO代码

QUICKSORT(A,p,r)
if p< r
     q = PARTITION(A,p,r)
     QUICKSORT(A,p,q-1)
     QUICKSORT(A,q+1,r)

PARTITION(A, p, r)
x = A[r]
i = p − 1
for j = p to r − 1 do
     if A[j] ≤ x then
          i = i + 1
          exchange A[i] and A[j]

exchange A[i + 1] and A[r]
return i + 1

随机游戏的PSEUDO代码

RandPartition(A, p, r)
     i = Random(p, r)
     exchange A[r] and A[i]
     return PARTITION(A, p, r)

RandQuicksort(A, p, r)
     if p < r then
     q = RandPartition(A, p, r)
     RandQuicksort(A, p, q − 1)
     RandQuicksort(A, q + 1, r)

1 个答案:

答案 0 :(得分:1)

是的,如果已知输入是随机的,则额外的随机化没有任何意义。确定性地选择最后一个元素作为枢轴也同样好。

如果输入知道要随机化,那么图片会大不相同。