1. 随机化快排
将数组元素划分为 3 个子数组:
- A:包含比枢轴元素小的元素;
- B:包含与枢轴元素相等的元素;
- C:包含比枢轴元素大的元素;
定理1 设数组含 n 个不同元素,随机快速排序算法的期望比较次数:
T(n)≤2nlnn
也即 T(n)=O(nlnn)(与确定型快排相一致)
首先来考验算法执行的流程,1. 选定枢轴(pivot)元素,2. 其余 n-1 个元素都要与其比较,以决定在子数组 A\B\C 的归属;
T(n)=n−1+1n∑i=0n−1(T(i)+T(n−i−1))
等式的左端是函数,等式的右端仍然出现该函数,显然是递归调用。
又易知,∑i=0n−1(T(i)+T(n−i−1))=2∑iT(i);
T(n)=n−1+2n∑i=0n−1T(i)
此时利用数学归纳法:
T(n)=≤≤≤n−1+2n∑i=0n−1T(i)n−1+2n∑i2ilni(使用积分作为其上界)n−1+2n∫n12xlnxdxn−1+2n(n2lnn−n22+12)≤2nlnn