可以这样来看双路快速排序的算法复杂度吗

可以这样来看双路快速排序的算法复杂度吗

我的想法主要是看对于大量任意的输入数据情况下排除特殊输入分析能够想到的最好和最坏情况,具体想法如下


对于大量任意的输入数据来说,双路快速排序最坏的情况应该就是恶化时成为o(n²)级别,那么如果每一次都是正好从中间分成两部分应该是最理想的情况?这个时候算法是o(nlogn)级别,可以理解成对于大量任意的输入数据情况下双路快速排序算法的复杂度在o(nlogn)级别到o(n²)级别之间波动吗?同样的对于归并排序对于大量任意的输入数据情况算法的复杂度保持o(nlogn)级别。



正在回答

登陆购买课程后可参与讨论,去登陆

1回答

课程中实现的快速排序算法,最坏复杂度就是 O(n^2),即每次标定点都非常“不幸”的选在了待处理区间的最大值或者最小值。


但是,课程中介绍了,这个概率太低了。所以此时,这个最坏复杂度是不实用的。因为你不能稳定地找到一组数据,让这个算法稳定地是 O(n^2) 级别的,虽然理论上存在这个可能。而实际上,99.999999999999999999999999999% (可能还要更多地 9)的概率,他是 O(nlogn) 的。


此时,我们在处理一个随机算法。对于随机算法来说,我们应该分析它的期望。快速排序算法的期望是 O(nlogn) 的。


继续加油!:)

  • Wonwayshon 提问者 #1
    “最坏复杂度是 O(n^2),即每次标定点都非常“不幸”的选在了待处理区间的最大值或者最小值”我理解了,同样的思路最幸运的情况是不是每次都正好将区间均分呢
    2021-04-13 07:53:13
  • liuyubobobo 回复 提问者 Wonwayshon #2

    是的。而如果我们严格使用数学期望的方式分析,快速排序的时间复杂度的期望是 O(nlogn)。关于这一点,我印象里课程中强调了很多次,对于不同的算法,我们应该使用不同的思路去看他们的复杂度,课程后续也会回头作总结的:)

    2021-04-13 08:29:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师