我找到了以下快速排序算法:
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过程,所有的递归算法都会发生这种情况。
有任何帮助吗?感谢
答案 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