思路:有时间再整理把
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]));