1-归并排序-PHP版

60 阅读1分钟
function mergeSort(&$array,$left,$right) {
    if ($left >= $right) {
        return;
    };

    $middle = floor(($right+$left)/2);
    // 中间值
    mergeSort($array,$left,$middle);
    mergeSort($array,$middle+1,$right);
    merge($array,$left,$middle,$right);
}

function merge(&$array,$left,$middle,$right) {
    $tempArr = []; 
    for($i = $left;$i<=$right;$i++) {
        $tempArr[$i-$left] = $array[$i];
    }

    $i = $left; // 左边
    $j = $middle + 1; 
    for($k=$left;$k<=$right;$k++) {
        if ($i > $middle) {
            $array[$k] = $tempArr[$j-$left];
            $j++;
        } elseif ($j>$right) {
            $array[$k] = $tempArr[$i-$left];
            $i++;
        } elseif($tempArr[$i-$left] > $tempArr[$j-$left]) {
            $array[$k] = $tempArr[$j-$left];
            $j++;
        } else {
            $array[$k] = $tempArr[$i-$left];
            $i++;
        }
    }
}


function makeArray($n) {
    $array = [];
    for ($i = 0;$i<$n;$i++) {
        $array[$i] = mt_rand(0,$n);
    }
    return $array;
}

$array = makeArray(100);
mergeSort($array,0,count($array)-1);
echo implode(",",$array);