algorithm - Quicksort 算法中的递归如何工作?

标签 algorithm sorting quicksort

我在 Google 中看到一些代码实现了这样的快速排序算法。

static public void QuickSort_Recursive(int [] arr, int left, int right)
{
    // For Recusrion
    if(left < right)
    {
        int pivot = Partition(arr, left, right);

        if(pivot > 1)
            QuickSort_Recursive(arr, left, pivot - 1);

        if(pivot + 1 < right)
            QuickSort_Recursive(arr, pivot + 1, right);
    }
}

我试着解决这个问题,我已经了解代码本身是如何工作的,但有一件事让我感到困惑。递归(上面的代码)是如何工作的。它是如何被终止的。我是递归函数的新手,我只知道它的基础。

谁能开门见山、简单易懂地向我解释一下。 :)

P.S:我知道分区部分,所以我没有包含它。

最佳答案

您可能知道,递归的工作原理是根据较小的实例定义较大的问题,并通过解决问题的较小实例并使用这些解决方案构建较大的解决方案来解决较大的问题。

在您的情况下,检查 left < right 的 if 语句是您问题的答案。随着 Quicksort_recursive 递归地减小问题的大小,将会出现数组中只有 1 个元素的点。然后,左将等于右,函数将不需要继续尝试递归地解决问题的较小实例。原因很简单:没有更小的问题实例。换句话说,不存在大小小于 1 的非空子数组

关于algorithm - Quicksort 算法中的递归如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736840/

相关文章:

c# - 无法实现数组均值的递归方法

jquery - 通过使用日期(按日期)在元素之间插入元素

java - 处理二维数组排序的任务

python - QuickSort 返回正确的值,但未就地排序

java - 使用堆排序对数组的一部分进行排序,bug

sorting - (快速)对 POSIX sh 中的文件列表进行排序

algorithm - 在图上使用 DFS - 确定图是否是具有特定 SCC 的团

algorithm - 找到最小的片数,以便可以重新排列原始序列以形成所需的序列(时间限制)

python - 如何将以下函数变成尾递归函数?

arrays - 排序数组的问题