python 快速排序_Python 算法 08 -- 快速排序

13c1fe036c3e35d62a38db7c5e2de112.gif
7c564338c799f998661597f40ccdd8b9.png

快速排序

1、快速排序的思想

① 先从数列中取出一个数(可以是第一个数,也可以是最后一个数,还可以是中间的数,本示例以第一个数)作为基准数

② 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

③ 再对左右区间重复第二步,直到各区间只有一个数

2、分析

将下列数组从小到大排序

7a62ab0394ec329853bfe341e69b90a6.png

待排序数组

● 当数组为空或者只有一个数组的时候

不需要排序

7a7046a079a8d08ecf8b8b434bd9659d.png

● 当数组中有 2 个元素时

检查第一个元素是否比第二个元素小,如果比第二个小,就交换他们的位置

cc6e6a02619d6e89f4883838709b20e8.png

● 当数组中有 3 个元素时

58d14eedadcb9835e99ffe7a718eac17.png

根据“快速排序”的思想,需要将数组分组,直到满足基线条件,首先,从数组中选出第一个元素作为基准值,接下来找出比基准值大的元素以及比基准值小的元素。

54918fd63a3bc0c6ea5c9021e293f62b.png

这里我们进行了分区,得到的两个数组是无序的,但是如果这两个数组是有序,对整个数组排序将变得非常容易。

82e84a2d880634137047e146aadaa351.png

如果子数组是有序的,就可以按下面合并成新的有序数组

左边的数组+基准值+右边的数组

quicksort(2,1)+基准值[5]+quicksort([])

>>> 1 2 5

3、方案

790275c2a29e2c92c13defa530257e45.png

>>>Python 算法 07 -- 归并排序的奥秘

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值