归并排序是一种分治算法,它将数组分成两个子数组,然后递归地对子数组进行排序,最后将两个有序的子数组合并成一个有序的数组。
以下是使用PHP实现归并排序的算法:
function mergeSort($arr) {
$length = count($arr);
if ($length <= 1) {
return $arr;
}
$mid = floor($length / 2);
$left = array_slice($arr, 0, $mid);
$right = array_slice($arr, $mid);
$left = mergeSort($left);
$right = mergeSort($right);
return merge($left, $right);
}
function merge($left, $right) {
$result = [];
while (count($left) > 0 && count($right) > 0) {
if ($left[0] <= $right[0]) {
$result[] = array_shift($left);
} else {
$result[] = array_shift($right);
}
}
while (count($left) > 0) {
$result[] = array_shift($left);
}
while (count($right) > 0) {
$result[] = array_shift($right);
}
return $result;
}
// 示例用法
$arr = [5, 2, 8, 4, 1, 9, 6, 3, 7];
$sortedArr = mergeSort($arr);
print_r($sortedArr);
这段代码首先定义了一个mergeSort
函数,它接受一个数组作为参数,并返回一个排序后的数组。如果数组长度小于等于1,直接返回原数组。
然后,将数组分成两个子数组,分别递归调用mergeSort
函数进行排序。
最后,调用merge
函数将两个有序的子数组合并成一个有序的数组。merge
函数使用两个指针分别指向左右两个子数组的开头,比较两个指针所指的元素,将较小的元素放入结果数组,并将指针向后移动一位。当其中一个子数组的指针到达末尾时,将另一个子数组的剩余元素依次放入结果数组。
最后,示例代码使用一个无序数组进行测试,将排序后的数组打印输出。输出结果为Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 )
。
上一篇:php注册验证提示
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站