快速排序分析

简单对快速排序比较次数效率分析

假设每次选择最后一个为分界点,分开之后,其他元素顺序不被打乱:
加入初始42,4,1,3,先选择3
clipboard.png

划分之后,变为左右两个子序列
clipboard.png

此时3已固定,分别选择子序列最后一个
clipboard.png

第一个子序列需要再划分一次,第二个序列只有一个元素,因此不用做任何事情
clipboard.png

假设对n个元素排序,有n!个,每个序列需要比较 $c_i$ 次,那么总共需要
$$f(n)=\sum_{i=1}^{n}c_i$$

次比较,平均意义上,假设每种序列概率相同,需要
$$g(n)={\sum_{i=1}^{n}c_i \over n!}={f(n) \over n!}$$

假设长度n的序列的所有情况一共需要f(n)次比较,当遇到n+1长的序列时,需要
$$f(n+1)={ {n!*\sum_{i=1}^{n}i} + { \sum_{k=0}^{n}C_{n}^{k}*(f(k)(n-k)! + k!f(n-k)) }}={n*(n+1)! + { 2\sum_{k=0}^{n}C_{n}^{k}*f(n-k)*k!}}$$

而n+2时,需要的次数为
$$f(n+1)={(n+1)(n+2)!} + {2\sum_{k=0}^{n+1}C_{n+1}^{k}*f(n+ 1 -k)*k!}$$
$$={(n+1)(n+2)!} + {2f(n+1)} + {(n+1)(f(n+1)-n(n+1)!}$$
$$={(2n+2)(n+1)!} + {(n+3)f(n+1)} $$

因此
$$f(n+1)={{(n+2)f(n)} + 2n*n!} $$

利用差分方程公式以及初始值$f(1)=0$,可解出
$$f(n+1)=2(n+2)!({1 \over 2} + {1\over 3} + ... + {1\over n+1} - {n \over n+2})$$


$$f(n)=2(n+1)!({1 \over 2} + {1\over 3} + ... + {1\over n} - {n-1 \over n+1})$$
$$f(n)=2(n+1)!( \sum_{k=2}^{n}{1 \over k} - {n-1 \over n+1})$$

平均比较次数为:
$$g(n)={f(n) \over n!} = {2(n+1)(\sum_{k=2}^{n}{1 \over k} - {n-1 \over n+1})} \approx 2(n+1)(\int_{1}^{n}{1\over x}dx - {n-1 \over n+1})=2(n+1)ln(n)-2(n-1)$$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值