首页 话题 小组 问答 好文 用户 我的社区 域名交易

[分享]PHP实现归并排序法

发布于 2025-03-18 09:41:05
0
6

通过这张图,很直观,一看就能明白归并排序法这个算法的思路:图下。 

图片alt

/*
 *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);
评论
站长交流