对于QuickSort,证明第一次分隔阶段(在指针交叉之前)用的平均交换次数是: N − 2 6 \frac{N-2}{6} 6N−2
前提:
- 待排序数组为 N N N 个顺序随机且元素互异的数组;
- 使用最后一个元素作为分隔元(partitioning element);
- 数组索引为到 1 1 1 到 N N N
假设:
- 分隔元是 N N N 个数中的第 j j j 个最大元素
证明:
-
在除了分隔元剩余的 N − 1 N-1 N−1 个元素中,有 j − 1 j-1 j−1 个元素小于分隔元,有 N − j N-j N−j 个元素大于分隔元
-
这 N − 1 N-1 N−1 个元素每个元素大于分隔元的概率为 p = N − j N − 1 p=\frac{N-j}{N-1} p=N−1N−j前 j − 1 j-1 j−1 个元素中大于分隔元的个数(即交换次数)的期望为: E = ( N − j ) ( j − 1 ) N − 1 E=\frac{(N-j)(j-1)}{N-1} E=N−1(N−j)(j−1)
-
对于每个 1 ≤ j ≤ N 1\le j \le N 1≤j≤N ,其出现的概率是 1 N \frac1N N1,即可解得平均交换次数为:
T = 1 N ∑ 1 ≤ j ≤ N ( N − j ) ( j − 1 ) N − 1 T = N − 2 6 \begin{aligned} &T = \frac 1N \sum_{1\le j\le N}\frac{(N-j)(j-1)}{N-1} \\ \\ &T= \frac {N-2}{6} \end{aligned} T=N11≤j≤N∑N−1(N−j)(j−1)T=6N−2
Reference
- C. A. R. Hoare, Quicksort, The Computer Journal, Volume 5, Issue 1, 1962, Pages 10–16, \https://doi.org/10.1093/comjnl/5.1.10