排序算法之快速排序

1 快排 递归 不稳定发生在基准元素与v[L]交换 需要partition三步走,一找二划三递归

快排的步骤:

  1. 选一个元素做基准
  2. 进行partition,就是把比基准小的放在基准的左边,把比基准数大的放到右边,划分结束后基准元素位于中间(如何划分看代码,从后往前找和从前往后找)
  3. 对每个分区递归操作上述划分函数,直至每个分序列大小为0或1(递归结束的条件)
  • 最差的情况O(n2)每次选的基准元素都是最大或者最小的,这样每次只划分一个分区
  • 最好的情况nlgn每次选的都是中位数,每次平均划分两个分区

面试中常问的:

  1. 快排为什么快?

快排之所以快就是因为用到了分治法

解释下冒泡跟快排的区别

还有快排不需要额外的辅助空间

  1. 快排的核心在哪里?

基准元素的选择以及元素的移动,对于无序数列,通常我们选取第一个或者最后一个作为基准元素,对于有序的数列,那就成为最差的情况,所以应该随机选取元素作为基准元素(或者选择三数取中值,随机选取三个数,选择中间值作为基准,比如选开头、结尾、中间三个数)

关于元素的移动有多种,代码中讲到的是一种
3. 快速排序的优化主要从以下几个方面考虑:

优化基准选择

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值