<?php
//归并排序算法
//比快排更稳定,主要思想是分治法
$arr = range(0,20);
shuffle($arr);
function arrSort($arrA, $arrB){
$arrC = [];
while(count($arrA) && count($arrB)){ //比较有序数组中的值并弹出
$arrC []= $arrA[0] > $arrB[0] ? array_shift($arrB) :array_shift($arrA);
}
return array_merge($arrC, $arrA, $arrB); //合并数组
}
function MergeSort($arr = []){
$len = sizeof($arr);
if($len <= 1){
return $arr;
}
$bin = floor($len/2);
$left_arr = array_slice($arr, 0, $bin);
$right_arr = array_slice($arr, $bin);
$left_arr = MergeSort($left_arr); //递归将数组打为俺只包含一个元素的数组
$right_arr = MergeSort($right_arr);
return arrSort($left_arr, $right_arr); //调用合并函数
}
var_dump(MergeSort($arr));
归并排序算法也是常见算法之一,稳定性比快排好