排序(七):快速排序

排序算法系列文章

排序(一):冒泡排序
排序(二):选择排序
排序(三):堆排序
排序(四):插入排序
排序(五):二分搜索
排序(六):归并排序
排序(七):快速排序
排序(八):希尔排序

快速排序(Quick Sort)

基本思想

  • 快速排序(Quick Sort)是对冒泡排序的一种改进,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数。
  • 快速排序的本质:逐渐将每一个元素都转换成轴点元素。

算法步骤

  1. 数组中选择一个轴点元素(pivot), 假设每次都选择 索引为0的元素为轴点元素
  2. 利用pivot将数组分割成2个子数组,将小于pivot的元素放在pivot前面(左侧),将大于pivot的元素放在pivot后面(右侧),等于pivot的元素放哪边都可以。
  3. 递归对子序列进行前面两步操作,直到不能再分割(子序列中只剩下1个元素)。

轴点构造

  • 最终目标是构造出以轴点元素为中心的序列:
  • 左半边是小于轴点元素的序列;
  • 右半边是大于轴点元素的序列;

过程:
begin为序列首位置,首先备份一个轴点元素

  1. 从右往左扫描,如果寻找到比轴点元素小的元素,找到以后,放到 begin 位置,begin++,然后反向寻找;否则则是end–;
  2. 从左往右扫描,如果寻找比轴点元素大的元素,找到以后,放到 end 位置,end–,然后反向寻找;否则则是 begin++;
  3. 当 begin == end,说明扫描结束,将一开始备份的轴点元素放到中间。
  4. 不断循环这个过程,直到把所有比轴点元素小的元素放到左半部分,把所有比轴点元素大的元素放到右半部分,才算完成这个轴点的构造。

轴点构造–优化

  • 轴点左右元素数量比较均匀的情况下,同时也是最好情况:O(nlogn)
  • 如果轴点左右元素数量极度不均匀,最坏情况:O(n^2)
  • 为了降低最坏情况的出现概率,一般采取的做法是:随机选择轴点元素,即可以在备份轴点元素前,将 begin 位置的元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值