快速排序时间复杂度分析-最好、最坏、平均

Best case Ω ( n ) \Omega(n) Ω(n)
The best case happens when the array is already sorted. Then for each element in the array, it enters the loop and exits at once.
worst case O ( n 2 ) O(n^2) O(n2)
( n − 1 ) + ( n − 2 ) + . . . + 1 = ( 1 / 2 ) n 2 + ( 1 / 2 ) n = O ( n 2 ) (n-1)+(n-2)+...+1 = (1/2)n^2+(1/2)n = O(n^2) (n1)+(n2)+...+1=(1/2)n2+(1/2)n=O(n2)
The worst case happens when the array is reverse ordered. For every cycle, only one element is sorted into the right place.
Average time complexity
Discuss the case of n elements. In the first loop, we compare (n-1) times and then we separate the array into 2 partitions.
For the sake of convenience, we represent the time complexity of sorting an n-element array by T(n).
Because the elements in the array is in random order, the possibility of each partition result is equal as 1 n \frac{1}{n} n1,because there are total n partition results.
Thus, we have the recurrent formula: T ( n ) = ( n − 1 ) + ∑ k = 1 n − 1 ( T ( k ) + T ( n − k ) ) n T(n) = (n-1) + \frac{\sum_{k=1}^{n-1}(T(k) + T(n-k))}{n} T(n)=(n1)+nk=1n1(T(k)+T(nk))
Write down some cases of ∑ k = 1 n − 1 ( T ( k ) + T ( n − k ) ) \sum_{k=1}^{n-1}(T(k) + T(n-k)) k=1n1(T(k)+T(nk)) and we find that the formula can be transformed to
T ( n ) = ( n − 1 ) + 2 ∑ k = 1 n − 1 T ( k ) n , n ≥ 1 T(n) = (n-1) + 2\frac{\sum_{k=1}^{n-1}T(k)}{n} ,n\ge1 T(n)=(n1)+2nk=1n1T(k),n1
with the perturbation method(下标扰动法)/ (列出几项寻找规律也可以)
Rewrite the formula and set n to n+1:
T ( n + 1 ) = ( n ) + 2 ∑ k = 1 n T ( k ) n + 1 , n ≥ 1 T(n+1) = (n) + 2\frac{\sum_{k=1}^{n}T(k)}{n+1} ,n\ge1 T(n+1)=(n)+2n+1k=1nT(k),n1
Do subtraction ( 3 ) × ( n + 1 ) − ( 2 ) × n (3)\times (n+1) - (2)\times n (3)×(n+1)(2)×n:
( n + 1 ) T ( n + 1 ) − n T ( n ) = 2 n + 2 T ( n ) , n ≥ 1 (n+1)T(n+1) - nT(n) = 2n + 2T(n) , n\ge 1 (n+1)T(n+1)nT(n)=2n+2T(n),n1
( n + 1 ) T ( n + 1 ) − ( n + 2 ) T ( n ) = 2 n , n ≥ 1 (n+1)T(n+1) - (n+2)T(n) = 2n , n\ge 1 (n+1)T(n+1)(n+2)T(n)=2n,n1
Set n to n-1 and rewrite the formula,
( n ) T ( n ) − ( n + 1 ) T ( n − 1 ) = 2 ( n − 1 ) , n ≥ 2 (n)T(n) - (n+1)T(n-1) = 2(n-1) , n\ge 2 (n)T(n)(n+1)T(n1)=2(n1),n2
Use the summation factor method to get the summation factor s n s_n sn:
for formula a n T n = b n T n − 1 + c n a_nT_n = b_nT_{n-1} + c_n anTn=bnTn1+cn
According to the definition of the summation factor, summation factor s n s_n sn satisfies:
s n − 1 a n − 1 = s n b n s_{n-1}a_{n-1} = s_nb_n sn1an1=snbn
Here a n = n , b n = n + 1 , c n = 2 ( n − 1 ) a_n = n ,b_n = n+1, c_n = 2(n-1) an=n,bn=n+1,cn=2(n1):
Thus, s n = a 1 a 2 . . . a n b 2 b 3 . . . b n + 1 = 2 ( n ) ( n + 1 ) s_n = \frac{a_1a_2...a_n}{b_2b_3...b_{n+1}} = \frac{2}{(n)(n+1)} sn=b2b3...bn+1a1a2...an=(n)(n+1)2
Let S n = a n T n s n = 2 n ( n ) ( n + 1 ) T ( n ) S_n = a_nT_ns_n = \frac{2n}{(n)(n+1)}T(n) Sn=anTnsn=(n)(n+1)2nT(n),we have
S n = S n − 1 + 4 ( n − 1 ) ( n ) ( n + 1 ) , n ≥ 2 S_n = S_{n-1} + \frac{4(n-1)}{(n)(n+1)} ,n\ge2 Sn=Sn1+(n)(n+1)4(n1),n2
S 1 = ( 1 / 3 ) T ( 1 ) = 0 S_1 = (1/3)T(1) = 0 S1=(1/3)T(1)=0
Thus, S n = ∑ k = 2 n 4 k k ( k + 1 ) = 4 ∑ k = 2 n 1 k + 1 S_{n} = \sum_{k=2}^n \frac{4k}{k(k+1)} = 4\sum_{k=2}^n \frac{1}{k+1} Sn=k=2nk(k+1)4k=4k=2nk+11
Because H n = 1 + 1 / 2 + 1 / 3 + . . . + 1 / n H_n = 1 + 1/2 + 1/3 + ... +1/n Hn=1+1/2+1/3+...+1/n,
S n = 4 ( H n + 1 n + 1 − 1 ) S_{n} = 4(H_n+\frac{1}{n+1}-1) Sn=4(Hn+n+111)
Now we finally switch back to T(n),
T ( n ) = S n s n a n T(n) = \frac{S_n}{s_na_n} T(n)=snanSn
= S n ( n + 1 ) 2 n =\frac{Sn(n+1)}{2n} =2nSn(n+1)
= 2 ( n + 1 ) ( H n + 1 n + 1 − 1 ) =2(n+1)(H_n+\frac{1}{n+1}-1) =2(n+1)(Hn+n+111)
= 2 ( n + 1 ) H n − 2 n =2(n+1)H_n - 2n =2(n+1)Hn2n
Because H n = 1 + 1 / 2 + 1 / 3 + . . . + 1 / n ≈ l n n H_n = 1 + 1/2 + 1/3 + ... +1/n \approx lnn Hn=1+1/2+1/3+...+1/nlnn,
≈ 2 ( n + 1 ) l n n − 2 n \approx 2(n+1)lnn - 2n 2(n+1)lnn2n
= O ( n l n n ) =O(nlnn) =O(nlnn)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值