<?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'));