阶段总结(四)——为什么同为O(n log n),快速排序的性能比堆排序要好?

在平均情况下,快速排序和堆排序的时间复杂度都是O(n log n),堆排序的时间复杂度甚至比快速排序的时间复杂度稳定。

因为快速排序最坏情况下时间复杂度是O(n²)。

但是,在实际的软件开发中,快速排序的性能要比堆排序好。为什么?

 

主要有两方面原因

 

堆排序数据访问的方式没有快速排序友好

 

对于快速排序来说,数据是顺序访问的。

对于堆排序来说,数据是跳着访问的。

比如堆排序的堆化过程中,对堆顶进行堆化会依次访问数组下标是 1,2,4,8 的元素,

而不是像快速排序那样,局部顺序访问,所以,这样对 CPU 缓存是不友好的。

 

对于同样的数据,在排序过程中,堆排序算法的数据交换次数要多于快速排序

排序有有序度和逆序度的概念

对于基于比较的排序算法来说,整个排序过程就是由两个基本的操作组成的,比较和交换(或移动)。

快速排序数据交换的次数不会比逆序度多。

而堆排序的第一步是建堆,建堆的过程会打乱数据原有的相对先后顺序,导致原数据的有序度降低。

比如对于一组已经有序的数据来说,经过建堆之后,数据反而变得更无序了。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值