QuickSort算法的递归调用

时间:2019-03-15 11:08:17

标签: c# recursion quicksort divide-and-conquer

我有一个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 = 5QuickSort(num, pIndex + 1, end)

为什么在进行第一个右递归调用后,该程序不会求值为QuickSort(num, start, pIndex-1)

基本上,QuickSort上的递归调用如何工作?

0 个答案:

没有答案