1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79  /** * 归并排序 * @param $arr * @return array */ function mergeSort($arr) { $arrCount = count($arr); if ($arrCount < 2) { return$arr; } $mid = ceil($arrCount / 2); // 向上取整一下 $leftArr = array_slice($arr, 0, $mid);$rightArr = array_slice($arr,$mid, $arrCount -$mid); return mergeArr(mergeSort($leftArr), mergeSort($rightArr)); } /** * 最终合并数组的方法 * @param $leftArr * @param$rightArr * @return array */ function mergeArr($leftArr,$rightArr) { $i = 0;$j = 0; $returnArr = []; while ($i < count($leftArr) &&$j < count($rightArr)) { if ($leftArr[$i] <$rightArr[$j]) {$returnArr[] = $leftArr[$i]; $i++; } else if ($leftArr[$i] >$rightArr[$j]) {$returnArr[] = $rightArr[$j]; $j++; } else {$returnArr[] = $leftArr[$i]; $returnArr[] =$rightArr[$j];$i++; $j++; } } for ($temp = $i;$temp < count($leftArr);$temp++) { $returnArr[] =$leftArr[$temp]; } for ($temp = $j;$temp < count($rightArr);$temp++) { $returnArr[] =$rightArr[$temp]; } return$returnArr; } /** * 快速排序 * @param $arr * @return array */ function quickSort($arr) { if (count($arr) < 2) { return$arr; } $flag =$arr[0]; $lessArr = [];$largeArr = []; $flagArr = [];$flagArr[] = $flag; for ($i = 1; $i < count($arr); $i++) { if ($arr[$i] <$flag) { $lessArr[] =$arr[$i]; } else if ($arr[$i] >$flag) { $largeArr[] =$arr[$i]; } else {$flagArr[] = $arr[$i]; } } return array_merge(quickSort($lessArr),$flagArr, quickSort(\$largeArr)); }