快速排序的核心思想是递归,那么何为递归?最简单的理解就是程序自己调用自己!接下来回到主题,快速排序的基本思想就是什么呢?举个例子,假设现在有这样一个需求:给50个人按照身高排序。我们假定第1个人的身高排在中间位置,那么其余49人逐个跟第1个人做比较,比他高的人都站到右侧,比他矮的人站到左侧,这样就把剩下的人分成了两个集合(左右两个);接下来各个集合依然按照这个规则继续排队,直到最后集合都变成只有1个人,此时也就完成了排序。以下代码来实现整个过程:
<?php
function quickSort($arr){
$count = count($arr);
if($count <= 1)
return $arr;
$mid = $arr[0];
$left = $right = [];
for($i = 1;$i < $count;$i++){
if($arr[$i] < $mid){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left,[$mid],$right);
}
$arr = [1,-1,100,88,-200,33,10];
$arr = quickSort($arr);
print_r($arr);
输出:Array ( [0] => -200 [1] => -1 [2] => 1 [3] => 10 [4] => 33 [5] => 88 [6] => 100 )