重新理解快速排序

QuickSort

QuickSort 版本一

依据

QuickSort版本一其实是依据 ‘荷兰国旗问题' 实现的。只不过这次划分时只有大于或者小于num的数。

思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于)

  2. 在两个区域里重复第一部操作

QuickSort 版本二

依据

QuickSort版本二就是实打实的依据 ‘荷兰国旗问题' 实现的。

思路

  1. 取数组最右的数作为num,划分为两个区域(大于、小于,等于)

  2. 在两个(大于、小于)区域里重复第一部操作

QuickSort 版本三

思考

版本一和版本二本质差不多,版本二较版本一的优化并没有多少。

之前一直考虑的情况都是能够分出三个部分,但如果只能分出两个部分(大于和等于、小于和等于)

/******假如给一个数组[1,2,3,4,5,6,7,8,9]******/
[1,2,3,4,5,6,7,8,]9]
[1,2,3,4,5,6,7,]8,9]
[1,2,3,4,5,6,]7,8,9]
            .
            .
            .

由于每次只能往一个区域进行递归,最后的时间复杂度也只能是0(N^2).

思路

  1. 随机取数组中的一个数作为num,与最右数交换,划分区域(大于、小于、等于)

  2. 在两个区域里重复第一部操作

总结

最后版本的时间复杂度也只能依靠概率来决定了,版本三的依据依旧是荷兰国旗问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值