<?php /** * 用快速排序方法进行数组排序 * User: knight * Date: 2017/11/3 * Time: 13:34 */ /** * 快速排序: * 再数组中去一个值做为标准(通常以数组第一个元素做为标准) * 遍历这个这个数组除标准元素外 全部元素 用来与标准元素进行比较 * 若是比标准元素小 则放入左边的数组,不然放入又边的数组 * * 而后针对 左边数组 与 右边数组 继续执行上面操做(逆序反之) * * 而后按照顺序 将 左边数组,标准元素,右边数组 合并 为一个数组 获得排序后的结果 * * */ //待排序数组 $arr = [1,8,5,6,78,54,12,98,56,32,54,12,98,65,32,45,84,59]; //快速排序函数 function quickSort($arr,$way='ASC') { if(!is_array($arr)){ return false; } //数组若只有一元素则不须要排序 $length = count($arr); if($length <= 1){ return $arr; } $left=$right=[]; for($i=1;$i<$length;$i++){ if($arr[$i]<$arr[0]){ $way == 'ASC' ? array_push($left,$arr[$i]) : array_push($right,$arr[$i]); }else{ $way == 'ASC' ? array_push($right,$arr[$i]) : array_push($left,$arr[$i]); } } $right = quickSort($right,$way); $left = quickSort($left,$way); return array_merge($left,[$arr[0]],$right); } var_dump(quickSort($arr,'DESC'));