快速排序及其优化

1 快速排序的java代码实现

算法思想:

选择轴值(pivot)

将序列划分成两个子序列L和R,使得L中所有记录都小于等于轴值,R中记录都大于轴值

对子序列L和R递归进行快速排序


其中selectPartion方法的代码为:


使用了最简单的选择中间的值,具体选择方法还可以自行定义

partion函数的java代码为:


算法分析:

不稳定

最差情况:

时间代价:O(n^2)

空间代价:O(n)

最佳情况:

时间代价:O(n*logn)

空间代价:O(logn)

平均情况:

时间代价:O(n*logn)

空间代价:O(logn)


2 快速排序优化

当快速排序的子数组小于某个长度时,不继续递归,最后对整个数组进行一次插入排序

经验表明:

最好的组合方式是当n(子数组的长度)小于等于16时就停止递归

改进后的代码如下:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值