为什么在算法书的介绍中快速排序堆栈的深度可以是O(lgn)

时间:2014-03-18 03:01:32

标签: algorithm quicksort clrs

现在我正在阅读算法介绍,Quicksort章节。它说尾递归可用于优化。

QUICKSORT'(A, p, r)
    while p < r
     do ▸ Partition and sort left subarray.
    q ← PARTITION(A, p, r)
    QUICKSORT'(A, p, q - 1)
    p ← q + 1

但如果每次迭代时枢轴数为[1,n-1] [n],则上述代码的堆栈深度将为O(n)。

QUICKSORT (A, p, r )
    while p < r
        do Partition and sort the small subarray Þrst
        q ← PARTITION(A, p, r )
        if q − p < r − q
            then QUICKSORT (A, p, q − 1)
                    p ← q + 1
        else QUICKSORT (A, q + 1, r )
                    r ← q − 1

我在上面的代码中理解的是,它将首先处理长度较小的子阵列。但为什么它可以减少到O(lgn)?如果每次旋转仍然是[1,n-1] [n],我认为它保持O(n)堆栈深度。

1 个答案:

答案 0 :(得分:0)

想想二叉树。任何二叉树。

现在在每个节点上,您选择使用较少的节点遍历子树,直到找到一个叶子。

您遵循的路径长度是多少? O(log n)?是

这里也一样。