/*原理:选择数组中的第一个元素为基准数,进行一趟扫描后将所有小于基准数的元素放置在左边数组;所有大于基准数的元素放置在右边数组;
直到子数组中的元素小于或者等于一个元素,最后将其合并为一个数组输出*/
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)//将数组进行合并输出;
}