算法复杂的快速排序?

时间:2014-10-21 13:54:06

标签: algorithm recurrence

我找到了以下快速排序算法:

function quicksort(array)
    less, equal, greater := three empty arrays
    if length(array) > 1  
        pivot := select any element of array
        for each x in array
            if x < pivot then add x to less
            if x = pivot then add x to equal
            if x > pivot then add x to greater
        quicksort(less)
        quicksort(greater)
        array := concatenate(less, equal, greater)

我想通过查找递归关系来进行算法分析。对于我每次调用此算法时所看到的,通过选择枢轴,例如,在原始数组的第一个位置。它使用两个生成的列表再次调用quicksort,所以我将:

                   one list ------ pow(2,0)=1
                less       greater--------2 lists----pow(2,1)=2
   less greater              less greater-------4 lists---pow(2,2)=4

所以它似乎形成了一种二叉树,所以如果我得到模式它将是: 2 ^ k = n,其中k是递归的级别,所以我将得到O(log n)

但如何对复发进行分析呢?我的意思是,因为我没有计算函数的de-stack过程,所有的递归算法都会发生这种情况。

有任何帮助吗?感谢

2 个答案:

答案 0 :(得分:1)

首先你应该考虑Quicksort不确定性。因此,您应该对最坏情况进行分析 - 最佳案例 - 平均情况。

以最坏的情况为例:

T(n)= T(n-1)+ O(n)

O(n)来自于您正在对整个数组进行分区的事实。 相反,T(n-1)是在最坏的情况下留给分区的元素数。

如果使用主定理解决重现,则得到O(n ^ 2)

同样在最好的情况下:

T(n)= 2T(n / 2)+ O(n)

这与merge-sort相同,并再次应用主定理得到O(nlogn)。

答案 1 :(得分:0)

我认为这是你正在寻找的master theorem

以下是一步一步的分析: http://www.cise.ufl.edu/class/cot3100fa07/quicksort_analysis.pdf

相关问题