/*原理:選擇數組中的第一個元素爲基準數,進行一趟掃描後將所有小於基準數的元素放置在左邊數組;所有大於基準數的元素放置在右邊數組;
直到子數組中的元素小於或者等於一個元素,最後將其合併爲一個數組輸出*/
function quick_sort($arr=array(),$len=0){
//判斷數組中的元素個數如果小於等於1則返回該數組
if($len<=1){
return $arr;
}
//選擇基準數
$base_num=$arr[0];
//創建兩個左右數組分別放置一趟掃描後放置的元素
$left_arr=array();
$right_arr=array();
for ($i=0; $i < $len; $i++) {
if($arr[i]<$base_num){
$left_arr[]=$arr[$i];//將小於基準數的元素放置左邊數組的末尾此方法和array_push方法相同執行時間較快
}
else{
$right_arr[]=$arr[$i];
}
}
$left_len=count($left_arr);
$left_arr=quick_sort($left_arr,$left_len);//對左邊數組進行遞歸調用再次快速排序;
$right_len=count($right_arr);
$right_arr=quick_sort($right_arr,$right_len);//對右邊數組進行遞歸調用再次快速排序;
return array_merge($left_arr,array($base_num),$right_arr)//將數組進行合併輸出;
}