每次拿到第一个数来做基准,分别获取大于这个数的集合(right)和小于这个数的集合(left),如果left或者right存在多个值就分别递归调用,直到当前值最左边的值或者最右边的值,然后在数组合并。
$demo = [
6,2,5,4,7,1,9
];
print_r(demo($demo));
function demo($demo)
{
$left = $right = [];
$curren = $demo[0];
$l = 0;
$r = 0;
for($i = 1; $i <= (count($demo) -1); $i++) {
if ($demo[$i] < $curren) {
$left[] = $demo[$i];
$l++;
} else {
$right[] = $demo[$i];
$r++;
}
}
if ($l > 0) {
$left = demo($left);
}
if ($r > 0) {
$right = demo($right);
}
return array_merge($left, [$curren], $right);
}
// 结果:Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 9 )