• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实现二分查找算法(代码详解)

php 搞代码 3年前 (2022-01-21) 14次浏览 已收录 0个评论

二分查找又称折半查找,二分查找算法要求数据必须是有序的,以下是php实现二分查找算法的代码。

一:递归方式

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];$target = 73;$low = 0;$high = count($array)-1;function bin_search($array, $low, $high, $target){    if ( $low <= $high){        var_dump($low, $high);echo "\n";        $mid =  intval(($low+$high)/2 );        if ($array[$mid] ==  $target){            return true;        }elseif ( $target < $array[$mid]){            return  bin_search($array, $low,  $mid-1, $target);        }else{            return  bin_search($array, $mid+ 1, $high, $target);        }    }    return false;}$find = bin_search($array, $low, $high, $target);var_dump($find);

执行结果

int(0)int(25)int(13)int(25)int(20)int(25)int(20)int(21)bool(true)

我们看到,经过4次二分查找,查找区间不断折半,最终找到了$target。

二:循环方式

$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];$target = 73;function bin_search($array, $target){    $low = 0;    $high = count($array)-1;    $find = false;    while (true){        if ($low <= $high){            var_dump($low, $high);echo "\n";            $mid = intval(($low + $high)/2);            if ($array[$mid] == $target){                $find = true;                break;            } elseif ($array[$mid] < $target){                $low = $mid+1;            } elseif ($array[$mid] > $target){                $high = $mid-1;            }        } else {            break;        }    }    return $find;}$find = bin_search($array, $target);var_dump($find);

执行结果

int(0)int(25)int(13)int(25)int(20)int(25)int(20)int(21)bool(true)

我们看到,两种方式过程和结果相同。下面我们来测试下针对关联数组的二分查找算法:

$array = ['a'=>1,'b'=>3,'c'=>6,'d'=>9,'e'=>13,'f'=>18,'g'=>19,'h'=>29,'i'=>38];$target = 19;function bin_search($array, $target){    $low = 0;    $high = count($array)-1;    $key_map = array_keys($array);    $find = false; <i style="color:transparent">@本文来源gaodai$ma#com搞$代*码6网</i><b>搞代gaodaima码</b>   while (true){        if ($low <= $high){            var_dump($low, $high);echo "\n";            $mid = intval(($low + $high)/2);            if ($array[$key_map[$mid]] == $target){                $find = true;                break;            } elseif ($array[$key_map[$mid]] < $target){                $low = $mid+1;            } elseif ($array[$key_map[$mid]] > $target){                $high = $mid-1;            }        } else {            break;        }    }    return $find;}$find = bin_search($array, $target);var_dump($find);执行结果int(0)int(8)int(5)int(8)bool(true)

两次二分查找,找到了$target,针对关联数组,我们使用了php的array_keys函数获得这个关联有序数组的key,通过key间接比对$target和$array的值。

以上就是PHP实现二分查找算法(代码详解)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实现二分查找算法(代码详解)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址