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);
}