快速排序的第一步是在列表中随机选取一个 基准值,将列表中剩余的其他数与基准值 逐一比较,小于基准值的放在基准值左侧,大于基准值的放在基准值右侧,这样就会形成如下的新列表:
- [小于基准值的列表] + 基准值 + [大于基准值的列表]
接下来对左侧小于基准值的列表继续执行上述过程,直至最后左侧排序完成
再对右侧大于基准值的列表继续执行上述过程,直至右侧排序完成
Notice
:在将数字分别放到基准值左右侧时候,总体上并不扰乱数字的顺序,比如5 4 3 2 1
以3
为基准值,第一步得到的是[2 1] 3 [5 4]
这样的顺序,其中2
和1
还是维持它们在初始列表中的顺序,5
和4
也是如此
将
[左侧已完成排序列表]
拼接上基准值
再拼接上[右侧已完成排序列表]
,即可得到排序完成的列表。从上面的描述可以看出,,由于需要反复执行快速排序
,所以快速排序需要用递归
来实现。。以下是执行流程的示意图:
- 快速排序执行流程及结果:
附
PHP
实现代码:
<?php
function quickSort($arrayNeedsSort)
{
if (empty($arrayNeedsSort) || count($arrayNeedsSort) <= 1) {
// 基准条件,退出
return $arrayNeedsSort;
} else {
// 否则满足递归条件,继续调用自己
// 选取第一个值作为基准值(随机也是可以的)
$base = array_shift($arrayNeedsSort);
$ltArr