我有一个A[] = { 10, 5, 3, 9, 22, 24, 28, 27, 15 }
数组,我想用QuickSort
对该数组排序。我有一种用于
QuickSort(int[] num, int start, int end)
{
if(start < end)
{
int pIndex = Partition(num, start, end); //Pivot Index
QuickSort(num, start, pIndex-1);
QuickSort(num, pIndex + 1, end);
}
}
在这里,我假设最后一个索引作为枢轴元素,即15
是第一次迭代中的第一个枢轴元素。
对于分区:
public static int Partition(int[] arr, int start, int end)
{
int pivot = arr[end];
int i = start - 1;
for (int j = start; j <= end - 1; j++)
{
if (arr[j] < pivot)
{
i++;
Swap(arr, i, j);
}
}
Swap(arr, i + 1, end);
return i + 1;
}
就像在QuickSort
中一样,我将问题分为两组,第一组的所有元素均小于或等于枢轴,第二组的所有元素均大于枢轴。
因此,在进行左递归调用时,我得到的输出为
3 5 9 10 15 24 28 27 22
3 5 9 10 15 24 28 27 22
3 5 9 10 15 24 28 27 22
现在,我的困惑是在对元素进行左侧排序之后,递归调用如何向右移动?
如何评估pIndex + 1 = 5
即QuickSort(num, pIndex + 1, end)
?
为什么在进行第一个右递归调用后,该程序不会求值为QuickSort(num, start, pIndex-1)
。
基本上,QuickSort
上的递归调用如何工作?