php 8.3 中实现降序快排推荐使用内置 usort + 箭头函数(如 fn($a, $b) => $b $a),简洁安全高效;手写递归版利于理解分治逻辑,但大数组需防栈溢出。

PHP 8.3 中实现快速排序(降序)不需要依赖新特性,直接用标准递归或迭代写法即可。关键在于比较逻辑改为 >,并注意 PHP 8.3 对严格类型和箭头函数的优化可让代码更简洁安全。
基础递归版(推荐初学理解)
清晰体现快排分治思想,每次选基准(pivot),把大于它的放左边(即降序的“前半部分”),小于等于的放右边:
function quickSortDesc(array $arr): array {
if (count($arr) $pivot) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
return array_merge(
quickSortDesc($left),
[$pivot],
quickSortDesc($right)
);
}
// 示例
$nums = [3, 6, 8, 1, 9, 2];
var_dump(quickSortDesc($nums)); // [9, 8, 6, 3, 2, 1]
使用 usort + 匿名函数(最简实用)
不手写快排,而是利用 PHP 内置的 usort()(底层是优化过的快排),配合箭头函数,一行比较逻辑搞定降序:
- PHP 8.3 支持更严格的类型推导,箭头函数中可省略类型提示但依然安全
- 比较函数返回正数表示前者应排在前(即降序)
$arr = [3, 6, 8, 1, 9, 2]; usort($arr, fn($a, $b) => $b $a); // 降序:用 $b $a(宇航员操作符) // 或显式写:fn($a, $b) => $a > $b ? -1 : ($a <h3>处理关联数组(按值降序)</h3> <p>若数组带键名(如 <code>['a' => 5, 'b' => 2]</code>),用 <code>uasort</code> 保持键名关联:</p> <pre class="brush:php;toolbar:false;">$assoc = ['x' => 15, 'y' => 3, 'z' => 11]; uasort($assoc, fn($a, $b) => $b $a); print_r($assoc); // ['x'=>15, 'z'=>11, 'y'=>3]
性能与注意事项
- 内置
usort在 PHP 8.3 中已针对小数组做优化,一般场景优先用它,比手写递归更快更稳 - 手写递归版注意:大数组可能触发栈溢出,生产环境建议改用迭代版或
usort - 如果元素是字符串、对象等,需在比较函数中明确类型转换,避免隐式转换导致排序异常
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











