排序:归并排序

原理: 分两部分,递归合并。

function merge_sort(&$a,$left,$right,&$b){
    if($left>=$right) return ;
    $mid = ($left+$right)/2;
    $mid = intval($mid);

    //递归
    merge_sort($a,$left,$mid,$b);
    merge_sort($a,$mid+1,$right,$b);

    //回溯,合并
    $l = $left;
    $r = $mid+1;
    $t = $left;
    while($l<=$mid && $r<=$right){
        if($a[$l]>$a[$r]) $b[$t++] = $a[$l++];
        else $b[$t++] = $a[$r++];
    }
    while($l<=$mid){
        $b[$t++] = $a[$l++];
    }
    while($r<=$right){
        $b[$t++] = $a[$r++];
    }

    //将已有序的元素复制到元数组
    for($i=$left;$i<=$right;$i++){
        $a[$i] = $b[$i];
    }
    return ;
}

$a = array(5,4,0,123,333,1);
$cnt = count($a);
$b = array();
merge_sort($a,0,$cnt-1,$b);

var_dump($a);
原文地址:https://www.cnblogs.com/yyf573462811/p/6420461.html