【快速排序】天下武功唯快排不破

快速排序

快排快排,显然重在快字,但是如何实现这个快呢?

简述

快排是一种采用分治策略的划分交换排序,由此我们就能看见这个快字的奥秘:划分 + 交换 + 分治。
实现划分交换以及分治的操作就构成了快排的基本步骤:

  1. 要实现划分首先需要有一个标准
    先从待排序数列中取出一个数作为基准
  2. 通过数字交换实现区间的划分
    比基准数大的均放在其右边,比基准数小的均放在其左边
  3. 得到左右区间之后进行分治
    对左右区间进行1,2操作直到个区间只有一个数
例证

详细的实现过程,我们通过一个例子来说明
假设我们现有一个数组 a[6] = {10,20,5,3,14,16}

012345
1020531416

我们设置 i=0 ,j=5 来标志数组的初始左右边界
取第一个数 X = a[0] = 10 作为基准数

012345
1020531416
i = 0j=5

(1) 从右往左即从j向前寻找比第一个基准数小的数 *j–*可知是 a[3] = 3 因为比基准数小的数字要放在基准数的左侧,所以将 a[3]和a[i] 数字交换
得到结果如下

012345
3205101416
i = 0j = 3

(2) 从左往右即从 i向后寻找第一个比基准数大的数 *i++*可知是 a[1]=20因为比基准数小的数字要放在基准数的右侧,所以将 *a[1]和a[j]*数字交换
得到结果如下

012345
3105201416
i = 1j = 3

重复(1),(2)步,直到 i==j最终得到结果如下

012345
3510201416
i == j = 2

由此完成一次排序,基准数 X = 10 左侧的数均小,右侧的数均大,由分治法再对左右区间重复操作,最终完成排序

完整的过程可以参考下图(来源百度)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值