拿出一个作为标尺将大数组分两堆 然后递归式的从子堆中继续拿标尺分堆 直到分不了为止说明有序 动态图如下:
具体PHP代码如下:
<?php
function my_quick_sort($array)
{
$size=count($array);//得到数组总长度
if($size>1)
{
$first=$array[0];//拿出第一个作为标尺
$front=array();//前面的数组 存比标尺小的数
$back=array();//后面的数组 存比标尺大的数
for ($i=1; $i < $size; $i++)
{
if($array[$i]<=$first)
{
$front[]=$array[$i];//如果小于等于标尺 就放入前面的数组
}else
{
$back[]=$array[$i];//如果大于标尺 就放入后面的数组
}
}
$front=my_quick_sort($front);//递归的对前面一半数组排序
$back=my_quick_sort($back);//递归的对后面一半数组排序
return array_merge($front,array($first),$back);//合并开始前面 中间 后面
}else
{
return $array;//如果数组只有一个长度 没必要排序 直接返回
}
}
?>
调用代码如下:
<?php
$array=array(10,9,8,7,6,5,4,3,2,1);
$result=my_quick_sort($array);
var_dump($result);
?>
结果如下: