快速排序代码如下:
void quickSort(int a*, int p, int r)
{
if(p < r)
{
int q = partition(a, p, r); //划分
quickSort(a, p, q-1);
quickSort(a, q+1, r);
}
}
每一趟的工作量 = 子问题的工作量 + 划分的工作量(即划分的比较次数)
下图展示了n种可能的输入:
每一次划分的比较次数为 n-1,则工作量总和有:
上述工作量总和可简写为
假设首元素排好序在每个位置是等概率的,则有:
下面利用差消法化简上述递推方程,即
首先,两边同时乘n,有
将带入,得:
为了灭掉,得:
也就是:
对两边同时除以得
对向下写出所有等式:
迭代求解,将这些等式带回去得:
因为,
所以,
综上,
网友评论