1.核心要点
取一个值(最好是中间值),将数组中的元素依次和这个值相比较,如果大于放到新建的右边的数组中,如果小于此值,将原数组中的元素放到左边的数组中,然后依次递归左边的数组和右边的数组,但是递归需要跳出条件,当传入的数组是最后一个元素时,也就是数组的数量等于1就不用排序了,直接返回,然后合并返回的数据。
原理:先将数组慢慢分解(选等级),再将数组慢慢合并(贪吃蛇原理)
public function quicksort($arr)
{
$count = count($arr);
if ($count <=1)
{
return $arr;
}
$key = $arr[0];
$left = $right = array(); //必须写,否则array_merge不管用
//第一种
array_shift($arr);
foreach ($arr as $value)
{
if ($value <$key)
{
$left[] = $value;
}else{
$right[] = $value;
}
}
//第二种
// for($i=1;$i<$count;$i++)
// {
// if ($arr[$i] <$key)
// {
// $left[] = $arr[$i];
// }else{
// $right[] = $arr[$i];
// }
// }
$l_re = self::quicksort($left);
$r_re = self::quicksort($right);
$result = array_merge($l_re,array($key),$r_re);
return $result;
}
public function demo()
{
$arr = array(1,6,9,7,8,3,2,4,1);
$re = $this->quicksort($arr);
dump($re);
}