快排
第一种(推荐)
//找到要插入的位置
//function findPos(&$arr, $low, $high) {-+
// $target = $arr[$low]; // 将目标数存起来
// while ($low < $high) {
// //从右向左找小于target的数
// while ($low < $high && $arr[$high] >= $target) {
// $high--;
// }
// $arr[$low] = $arr[$high]; //将arr[high]填到arr[low]中
// //从左向右找大于target的数
// while ($low < $high && $arr[$low] <= $target) {
// $low++;
// }
// $arr[$high] = $arr[$low]; //将arr[low]填到arr[high]中
// }
// $arr[$high] = $target; //此时low=high,将目标数填入这个坑中
// print_r($arr);
// return $high;
//}
//
//function quitSort(&$arr,$low,$high){
// $pos = findPos($arr, $low, $high);
// if ($low<$pos-1){
// quitSort($arr,$low,$pos-1);
// }
// if ($pos+1 < $high){
// quitSort($arr,$pos+1,$high);
// }
//}
第二种方便理解
//$arr = [12,56,98,32,16,34,2,9,1];
//$len = count($arr);
//quitSort($arr,0,$len-1);
//echo phpinfo();
//$a = array(2,13,42,34,56,23,67,365,87665,54,68,3);
//
//function quick_sort($a)
//{
// // 判断是否需要运行,因下面已拿出一个中间值,这里<=1
// if (count($a) <= 1) {
// return $a;
// }
//
// $middle = $a[0]; // 中间值
//
// $left = array(); // 接收小于中间值
// $right = array();// 接收大于中间值
//
// // 循环比较
// for ($i=1; $i < count($a); $i++) {
//
// if ($middle < $a[$i]) {
//
// // 大于中间值0
// $right[] = $a[$i];
// } else {
//
// // 小于中间值
// $left[] = $a[$i];
// }
// }
//
// // 递归排序划分好的2边
// $left = quick_sort($left);
// $right = quick_sort($right);
//
// // 合并排序后的数据,别忘了合并中间值
// return array_merge($left, array($middle), $right);
//}
//
//print_r(quick_sort($a));
////print_r(asort($a));
//echo phpinfo();