思路如下
选择第一个为中间数 然后递归排序左右。
代码如下
<?php
$arr = array(25,133,452,364,5876,293,607,365,8745,534,18,33);
function quick_sort($arr)
{
// 判断是否需要继续
if (count($arr) <= 1) {
return $arr;
}
$middle = $arr[0]; // 中间值
$left = array(); // 小于中间值
$right = array();// 大于中间值
// 循环比较
for ($i=1; $i < count($arr); $i++) {
if ($middle < $arr[$i]) {
// 大于中间值
$right[] = $arr[$i];
} else {
// 小于中间值
$left[] = $arr[$i];
}
}
// 递归排序两边
$left = quick_sort($left);
$right = quick_sort($right);
// 合并排序后的数据,别忘了合并中间值
return array_merge($left, array($middle), $right);
}