zoukankan      html  css  js  c++  java
  • 【天天数据结构和算法】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型溢出)

  • 相关阅读:
    kubernetes----资源控制器5
    kubernetes----二进制安装3
    kubernetes----自动化安装2
    kubernetes----基础1
    PC微信低版本限制登录怎么办?
    mysql排名次
    mysql中GROUP BY中报错
    scrapy框架操作
    python QQ与微信自动发消息
    python中调用js的编码问题
  • 原文地址:https://www.cnblogs.com/jysdhr/p/7095341.html
Copyright © 2011-2022 走看看