![13c1fe036c3e35d62a38db7c5e2de112.gif](https://img-blog.csdnimg.cn/img_convert/13c1fe036c3e35d62a38db7c5e2de112.gif)
![7c564338c799f998661597f40ccdd8b9.png](https://img-blog.csdnimg.cn/img_convert/7c564338c799f998661597f40ccdd8b9.png)
快速排序
1、快速排序的思想
① 先从数列中取出一个数(可以是第一个数,也可以是最后一个数,还可以是中间的数,本示例以第一个数)作为基准数
② 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
③ 再对左右区间重复第二步,直到各区间只有一个数
2、分析
将下列数组从小到大排序
![7a62ab0394ec329853bfe341e69b90a6.png](https://img-blog.csdnimg.cn/img_convert/7a62ab0394ec329853bfe341e69b90a6.png)
待排序数组
● 当数组为空或者只有一个数组的时候
不需要排序
![7a7046a079a8d08ecf8b8b434bd9659d.png](https://img-blog.csdnimg.cn/img_convert/7a7046a079a8d08ecf8b8b434bd9659d.png)
● 当数组中有 2 个元素时
检查第一个元素是否比第二个元素小,如果比第二个小,就交换他们的位置
![cc6e6a02619d6e89f4883838709b20e8.png](https://img-blog.csdnimg.cn/img_convert/cc6e6a02619d6e89f4883838709b20e8.png)
● 当数组中有 3 个元素时
![58d14eedadcb9835e99ffe7a718eac17.png](https://img-blog.csdnimg.cn/img_convert/58d14eedadcb9835e99ffe7a718eac17.png)
根据“快速排序”的思想,需要将数组分组,直到满足基线条件,首先,从数组中选出第一个元素作为基准值,接下来找出比基准值大的元素以及比基准值小的元素。
![54918fd63a3bc0c6ea5c9021e293f62b.png](https://img-blog.csdnimg.cn/img_convert/54918fd63a3bc0c6ea5c9021e293f62b.png)
这里我们进行了分区,得到的两个数组是无序的,但是如果这两个数组是有序,对整个数组排序将变得非常容易。
![82e84a2d880634137047e146aadaa351.png](https://img-blog.csdnimg.cn/img_convert/82e84a2d880634137047e146aadaa351.png)
如果子数组是有序的,就可以按下面合并成新的有序数组
左边的数组+基准值+右边的数组
quicksort(2,1)+基准值[5]+quicksort([])
>>> 1 2 5
3、方案
![790275c2a29e2c92c13defa530257e45.png](https://img-blog.csdnimg.cn/img_convert/790275c2a29e2c92c13defa530257e45.png)
>>>Python 算法 07 -- 归并排序的奥秘