排序算法的小问题

1 为什么快速排序比堆排序快?

参考资料:http://blog.csdn.net/u010189459/article/details/27702027

  1. 堆排序每次调整堆的结构时,把堆顶元素移除,然后把叶节点放到堆顶上面,然后重新调整。这个调整的过程有很多次比较移动,最差的情况下就是重新从堆顶移到底部,这里很多比较移动是无用的。尤其在数据规模很大的时候,如果当前数据量是原来的10倍,那么用于比较的时间开销可能是原来的10log10倍。

  2. 堆排序的过程中,需要大量的随机存取。每次比较父节点和字节点的值大小的时候,虽然计算下标会很快完成,但是在大规模的数据中对数组指针寻址也需要一定的时间。而快速排序只需要将数组指针移动到相邻的区域即可。在堆排序中,会大量的随机存取数据;而在快速排序中,只会大量的顺序存取数据。随着数据规模的扩大,这方面的差距会明显增大。在这方面的时间开销来说,快速排序只会线性增长,而堆排序增加幅度很大,会远远大于线性。

  3. 在快速排序中,每次数据移动都意味着该数据距离它正确的位置越来越近,而在堆排序中,类似将堆尾部的数据移到堆顶这样的操作只会使相应的数据远离它正确的位置,后续必然有一些操作再将其移动,即“做了好多无用功”。

2.快速排序为什么那么快?或者说快速排序为什么不那么快?

参考:http://blog.csdn.net/linfeng24/article/details/38429055
http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/

3.排序算法的时间复杂度和空间复杂度

快排:
http://blog.csdn.net/weshjiness/article/details/8660583

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值