排序:归并排序

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值