当给出以下分区方法时,我需要在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;}
所以这有点毛茸茸的问题。在我看来,我要么必须创建一个存储索引的数组,要么以某种方式将数组拆分(如果可能的话,不确定),然后递归调用该函数。
有关如何创建算法的任何想法?