通过这张图,很直观,一看就能明白归并排序法这个算法的思路:图下。
/*
*Author:www.huaqu.club
*Time:2025-03-18
*Note:归并排序算法PHP实现
*/
//归并排序算法PHP实现
$dst_array=array(26,5,7,9,4,2,8,11,25,89,56,35,56,14,18,23,16,19,34,3,17,99,49,
22,108,25,104,13,50);
function mergerSort($array){
//计算数组的长度
$leng=count($array);
//限制如果此数组只有1个元素时,则不再排序
if($leng==1) return $array;
//对数组取中
$middle=intval($leng/2);
//将数组切分成前后两部分
$frontArr=array_slice($array,0,$middle);
$behindArr=array_slice($array,$middle);
//递归每部分的数组切分至最小单元后进行处理返回
$frontArr=mergerSort($frontArr);
$behindArr=mergerSort($behindArr);
//对前后两个已经排好了序的数据,哪个更小就将哪个插入新的数组。
$newArr=array();
while($frontArr && $behindArr){
$newArr[]=$frontArr[0]<$behindArr[0]?array_shift($frontArr):array_shift($behindArr);
}
//可能前台数组个数差异及排列问题出现一个数组为空时,另一个数组尚不为空。需要将两数组合并
return array_merge($newArr,$frontArr,$behindArr);
}
$t=mergerSort($dst_array);
print_r($t);