PHP 归并排序和合并两个有序数组

思路:有时间再整理把

function dividArr($arr)
{
	$size = count($arr);
    // 这一步很重要,否则可能死循环
	if ($size < 2) {
		return $arr;
	}
	
	$mid = floor($size / 2);
	$leftArr = array_slice($arr, 0, $mid);
	$rightArr = array_slice($arr, $mid);
	return merge(dividArr($leftArr), dividArr($rightArr));
}


// merge 也适合合并两个有序数组
function merge($leftArr, $rightArr)
{
	var_dump($rightArr);
	$i = $j = $k = 0;
	$lSize = count($leftArr);
	$rSize = count($rightArr);
	$mergeArr = [];
	while ($i < $lSize && $j < $rSize) {
		$mergeArr[$k++] = $leftArr[$i] > $rightArr[$j] ? $rightArr[$j++] :  $leftArr[$i++];
	}
	
	while ($i < $lSize) {
		$mergeArr[$k++] = $leftArr[$i++];
	}
	while ($j < $rSize) {
		$mergeArr[$k++] = $rightArr[$j++];
	}
	return $mergeArr;
}

var_dump(dividArr([1,4,7,3,2]));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值