php自己实现sort
PHP 自定义排序实现
在 PHP 中,可以通过自定义比较函数来实现排序功能。PHP 提供了多种排序函数,如 usort()、uasort() 和 uksort(),它们允许用户定义自己的排序逻辑。
使用 usort() 实现自定义排序
usort() 函数用于对数组进行排序,并使用用户自定义的比较函数。以下是一个示例:

$numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
usort($numbers, function($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
});
print_r($numbers);
自定义对象排序
如果需要排序对象数组,可以定义比较函数来根据对象的属性排序:

class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];
usort($people, function($a, $b) {
return $a->age <=> $b->age;
});
print_r($people);
实现冒泡排序算法
如果需要完全自己实现排序算法,可以参考以下冒泡排序的实现:
function bubbleSort(array &$arr) {
$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
}
$numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
bubbleSort($numbers);
print_r($numbers);
实现快速排序算法
快速排序是另一种高效的排序算法,以下是 PHP 实现:
function quickSort(array &$arr, $left = 0, $right = null) {
if ($right === null) {
$right = count($arr) - 1;
}
if ($left < $right) {
$pivotIndex = partition($arr, $left, $right);
quickSort($arr, $left, $pivotIndex - 1);
quickSort($arr, $pivotIndex + 1, $right);
}
}
function partition(array &$arr, $left, $right) {
$pivot = $arr[$right];
$i = $left - 1;
for ($j = $left; $j < $right; $j++) {
if ($arr[$j] < $pivot) {
$i++;
[$arr[$i], $arr[$j]] = [$arr[$j], $arr[$i]];
}
}
[$arr[$i + 1], $arr[$right]] = [$arr[$right], $arr[$i + 1]];
return $i + 1;
}
$numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
quickSort($numbers);
print_r($numbers);
注意事项
- 自定义比较函数应返回整数:小于 0 表示第一个参数小于第二个参数,等于 0 表示相等,大于 0 表示第一个参数大于第二个参数。
- 对于大型数组,快速排序通常比冒泡排序更高效。
- PHP 内置的排序函数(如
sort())已经高度优化,自定义排序算法可能性能较差。






