5.4 递归算法(附:归并排序)

5.4 递归算法

若一个算法通过把问题归约到带更小输入的相同问题的实例来解决原来的问题,则这个算法称为递归的。

简单来所就是,将输入减小,比如下面这个阶乘的例子,求n!的值:

function factorial($n){
    if ($n==1){
        return 1;
    }
    return $n*factorial($n-1);
}

在上面的函数中,同一个函数,输入不断减小。

实操:归并排序

先说什么是归并排序,就是先将数组拆分成更小的数组,然后真对这些小数组进行排序,排序后组合成已经排好序的数组。

示意图

源代码

<?php
function mergeSort($line){
    if (count($line)<=1){
        return $line;
    }
    $middle=ceil(count($line)/2);
    return sortFunction(
        mergeSort(array_slice($line,0,$middle)),
        mergeSort(array_slice($line,$middle))
    );
}

function sortFunction($array1,$array2){
    // todo 这里重点不是排序函数,所以就不在这里费心思了
    $newArray=array_merge($array1,$array2);
    sort($newArray);
    return $newArray;
}

$line=[8,2,4,6,9,7,10,1,5,3];

print_r(mergeSort($line));

输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值