如何实现高效的排序算法?

        

如何实现高效的排序算法?
空间复杂度:

 不是原地排序的算法,需要注意数据量是不是很大,如果100M的数据,突然多出100M的临时空间申请,这相当于需
要多出一倍的空间量,不太合适用非原地排序算法。

稳定性:
如果数据要求稳定的排序,那么要排除不稳定的排序。


时间复杂度:
有特殊需求的可以使用桶排序、计数排序和基数排序。数据量比较大时,如果内存不做限制,那么归并排序好,快速排序,因为分割数选的不好时,时间复杂度有可能退化为O(n2)。数据量非常小时,可以考虑插入排序,因为数据量小时,时间复杂度为O(n2)不一定比O(logn)执行慢。

时间复杂度O(n2)执行比O(logn)的情况?

假设 k=1000,c=200,当我们对小规模数据(比如 n=100)排序时,n2的值实际上比 knlogn+c 还要小。
knlogn+c = 1000 * 100 * log100 + 200 远大于10000
n^2 = 100*100 = 10000


如何优化快速排序?

1,三数取中法。取首尾中3个数比较,取中间值的分割数。数据量大时,可以取5,10个数取中都可以。
2,随机法。每次的分割数随机取,概率学来说,不可能每次都是最大,或者最小。

综合来说是快速排序好点。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值