You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何推导QuickSort平均时间复杂度?求解其递推关系式

快速排序平均时间复杂度推导步骤

首先明确平均情况的递推式:

T(n) = Σₚ=1ⁿ(1/n (T(p-1)+T(n-p)))+n-1

步骤1:简化求和项

观察求和中的两个部分:Σₚ=1ⁿ T(p-1) 和 Σₚ=1ⁿ T(n-p)

  • 对Σₚ=1ⁿ T(p-1),令k=p-1,当p=1时k=0,p=n时k=n-1,求和等价于Σₖ=0ⁿ⁻¹ T(k)
  • 对Σₚ=1ⁿ T(n-p),令k=n-p,当p=1时k=n-1,p=n时k=0,求和顺序反转不影响结果,同样等价于Σₖ=0ⁿ⁻¹ T(k)

结合T(0)=0(空数组排序时间为0),原递推式简化为:
T(n) = (2/n) * Σₖ=1ⁿ⁻¹ T(k) + n - 1

步骤2:构造差分递推式

将式子两边乘n,得到:
n*T(n) = 2*Σₖ=1ⁿ⁻¹ T(k) + n(n-1)

再写出n-1时的表达式(n≥2):
(n-1)*T(n-1) = 2*Σₖ=1ⁿ⁻² T(k) + (n-1)(n-2)

用第一个式子减去第二个式子,左边为n*T(n) - (n-1)*T(n-1),右边求和项相减后剩余2*T(n-1),多项式部分化简为:
n(n-1) - (n-1)(n-2) = 2(n-1)

整理后得到:
n*T(n) = (n+1)*T(n-1) + 2(n-1)

步骤3:转化为可求和的形式

两边同时除以n(n+1),定义S(n) = T(n)/(n+1),递推式变为:
S(n) = S(n-1) + 2(n-1)/(n(n+1))

对分式做部分分式分解:
(n-1)/(n(n+1)) = -1/n + 2/(n+1)
因此:
2(n-1)/(n(n+1)) = -2/n + 4/(n+1)

步骤4:展开求和求解

初始条件:n=1时T(1)=0,所以S(1)=0/(1+1)=0

展开S(n):
S(n) = Σₖ=2ⁿ [ -2/k + 4/(k+1) ]

拆分求和项并调整下标:

  • Σₖ=2ⁿ (-2/k) = -2*(Hₙ - 1),其中Hₙ是第n个调和数
  • Σₖ=2ⁿ 4/(k+1) = 4*(Hₙ₊₁ - 1 - 1/2) = 4*(Hₙ₊₁ - 3/2)

合并计算后:
S(n) = 2Hₙ + 4/(n+1) - 4

代回T(n) = (n+1)*S(n),化简得:
T(n) = 2(n+1)Hₙ - 4n

步骤5:渐进复杂度近似

调和数的近似公式为Hₙ ≈ ln(n) + γ(γ≈0.5772为欧拉-马歇罗尼常数),代入后忽略低阶项:
T(n) ≈ 2n ln(n) + 2γ n - 4n

若以2为底的对数计算(算法分析常用底数),ln(n) = log₂(n)/log₂(e),则2ln(n) ≈ 1.386log₂(n),最终得到:
T(n) ≈ 1.38n log₂(n) + O(n)

补充说明

主定理不适用于该递推式,因为主定理针对的是T(n)=aT(n/b)+f(n)形式的分治递推,而本题递推为求和形式,需通过差分、调和数展开的方法求解。

内容的提问来源于stack exchange,提问作者Vincenzo Narendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:21:38