排序算法 php实现
以下是在PHP中实现常见排序算法的几种方法,每种算法均附上代码示例和简要说明:
冒泡排序
通过重复比较相邻元素并交换位置完成排序,时间复杂度为O(n²)。
function bubbleSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
return $array;
}
快速排序
采用分治策略,通过选取基准值将数组分为两部分递归排序,平均时间复杂度O(n log n)。

function quickSort($array) {
if (count($array) <= 1) return $array;
$pivot = $array[0];
$left = $right = [];
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] < $pivot) $left[] = $array[$i];
else $right[] = $array[$i];
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
选择排序
每次遍历选择最小元素放到已排序序列末尾,时间复杂度O(n²)。
function selectionSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
$minIndex = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($array[$j] < $array[$minIndex]) {
$minIndex = $j;
}
}
if ($minIndex != $i) {
$temp = $array[$i];
$array[$i] = $array[$minIndex];
$array[$minIndex] = $temp;
}
}
return $array;
}
插入排序
将未排序元素插入到已排序部分的正确位置,适合小规模数据,时间复杂度O(n²)。

function insertionSort($array) {
$n = count($array);
for ($i = 1; $i < $n; $i++) {
$key = $array[$i];
$j = $i - 1;
while ($j >= 0 && $array[$j] > $key) {
$array[$j + 1] = $array[$j];
$j--;
}
$array[$j + 1] = $key;
}
return $array;
}
归并排序
分治法典型应用,将数组分成两半分别排序后合并,时间复杂度O(n log n)。
function mergeSort($array) {
if (count($array) <= 1) return $array;
$mid = (int)(count($array) / 2);
$left = array_slice($array, 0, $mid);
$right = array_slice($array, $mid);
return merge(mergeSort($left), mergeSort($right));
}
function merge($left, $right) {
$result = [];
while (!empty($left) && !empty($right)) {
if ($left[0] <= $right[0]) array_push($result, array_shift($left));
else array_push($result, array_shift($right));
}
return array_merge($result, $left, $right);
}
使用内置函数
PHP提供sort()、rsort()等内置排序函数,底层使用快速排序实现:
$array = [3, 1, 4];
sort($array); // 升序
rsort($array); // 降序
以上实现可根据实际需求选择,大规模数据建议使用快速排序或归并排序,小规模数据可用插入排序。






