【天天数据结构和算法】PHP实现二分查找的两种方法

巩固一下大学时期学习的二分查找法,用PHP实现:

1.递归方法实现:

/**
 * @Description:二分查找法
 * @User:jysdhr
 * @param $target 查找目标
 * @param $arr 待查找数组
 * @param $l 数组起始索引
 * @param $r 数组结束索引
 * @return int target所在位置 -1则不存在
 */
function BinarySearch($target,$arr,$l,$r){
    if ($l>$r){
        return -1;
    }
    $mid = $l+($r-$l)/2;
    if ($target == $arr[$mid])
        return $mid;
    if ($target<$arr[$mid])
        return BinarySearch($target,$arr,$l,$mid-1);
    else
        return BinarySearch($target,$arr,$mid+1,$r);
}

$arr = [1,3,5,6,7,8,10];
var_dump(BinarySearch(9,$arr,0,6)) ;

2.循环方法实现:

<?php
/**
 * @Description:二分查找法循环处理
 * @User:jysdhr
 * @param $target 查找目标
 * @param $arr  待查找数组
 * @return int 返回索引 -1为不存在
 */
function BinarySearch($target,$arr)
{
    //基于在数组arr [l,r]区间内查找target
    $l = 0;
    $r = count($arr) - 1;
    while ($l <= $r)
    {
        $mid = $l + ($r - $l)/2;
        if ($target == $arr[$mid])
            return $mid;
        if ($target < $arr[$mid])
            $r = $mid - 1;
        else
            $l = $mid + 1;
    }
    return -1;
}

总结:因为PHP有自动类型转换,而不用考虑整形溢出的这种异常.哈哈,不得不说,php处理二分查找确实很简单.也很好理解(强类型语言注意int型溢出)