使用随机分区进行就地快速排序,仅将数组作为参数

时间:2017-11-14 06:24:28

标签: java quicksort in-place

当给出以下分区方法时,我需要在java中实现快速排序:

private static int partition (int[] A, int low, int high)
{
int pivot, tmp, l, r;
pivot = low + qsr.nextInt(high - low + 1);
l = low;
r = high-1;
tmp = A[pivot];
A[pivot] = A[high];
A[high] = tmp;
pivot = high;
do
    {
    tmp = A[l];
    A[l] = A[r];
    A[r] = tmp;
    for(; l <= r && A[l] < A[pivot]; ++l)
        ;
    for(; l <= r && A[pivot] < A[r]; --r)
        ;
    }
while (l <= r);
tmp = A[l];
A[l] = A[pivot];
A[pivot] = tmp;
return l;
}

它从低和高索引之间的数组中选择一个随机元素作为pivot。然后对枢轴的左侧进行排序,使其包含的值小于枢轴,右侧包含的值仅包含较大的值。排序仅在低值和高值之间完成。最后,返回pivot的索引。

如果函数将低值和高值作为参数,则快速排序将非常容易实现,但它不会:

 public static int[] quickSort (int[] table)
{return table;}

所以这有点毛茸茸的问题。在我看来,我要么必须创建一个存储索引的数组,要么以某种方式将数组拆分(如果可能的话,不确定),然后递归调用该函数。

有关如何创建算法的任何想法?

0 个答案:

没有答案