进一个数组,按照二分快排的规则,将他们的元素按照从小到大的顺序排序
<?php
function quickSort($arr){
$base = $arr[0];
$len = count($arr);
if($len<=1){ //注意是<=1因为传进来的数组也有可能是空数组
return $arr;
}
$left_arr = [];
$right_arr = [];
for($i=1;$i<$len;$i++){
if($arr[$i]<$base){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr =quickSort($left_arr);
$right_arr =quickSort($right_arr);
return array_merge($left_arr,array($base),$right_arr);
}
$c = quickSort([6,5,3,7,10,4,2]);
print_r($c);
?>
解题思路:
选择第一个为基础元素,然后将其余的元素与之比较,小的放一个数组,大的放一个数组。然后再把切分的两个元素是乱的的数组再次拿来进行二分排序。然后一直这样拆分、一直到两个数组中的元素都细分到一对一的这种无法在进行比较了之后一直。
将左边的数组和基数元素和右边的数组合并、合并、再合并 。最后得到得就是排序了的数组。