PHP二分查找算法示例【递归与非递归方法】


Posted in PHP onSeptember 29, 2016

本文实例讲述了PHP二分查找算法。分享给大家供大家参考,具体如下:

binarySearch

二分查找采用的方法比较容易理解,以数组为例:

① 先取数组中间的值floor((low+top)/2),

② 然后通过与所需查找的数字进行比较,若比中间值大,则将首值替换为中间位置下一个位置,继续第一步的操作;若比中间值小,则将尾值替换为中间位置上一个位置,继续第一步操作

③ 重复第二步操作直至找出目标数字

比如从1,3,9,23,54 中查找数字23,

首位置为0, 尾位置为4,中间位置就为2 值为9,比23小,则首位置更新为2+1即3;那么接下来中间位置就为(3+4)/2=3,值为23,比较相等即找到

//  非递归算法:
//  $target是要查找的目标 $arr是已经排序好的数组
function binary(&$arr,$low,$top,$target){
    while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
      $mid = floor(($low+$top)/2);
      echo $mid."<br>";
      if($arr[$mid]==$target){
        return $arr[$mid];
      }elseif($arr[$mid]<$target){
        $low = $mid+1;
      }else{
        $top = $mid-1;
      }
    }
    return -1;
}
//  递归算法:
function binaryRecursive(&$arr,$low,$top,$target){
    if($low<=$top){
      $mid = floor(($low+$top)/2);
      if($mid==$target){
        return $arr[$mid];
      }elseif($arr[$mid]<$target){
        return binaryRecursive($arr,$mid+1,$top,$target);
      }else{
        return binaryRecursive($arr,$low,$top-1,$target);
      }
    }else{
      return -1;
    }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
php的hash算法介绍
Feb 13 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP微商城开源代码实例
Mar 27 PHP
phpstudy2020搭建站点的实现示例
Oct 30 PHP
PHP快速排序quicksort实例详解
Sep 28 #PHP
PHP实现QQ快速登录的方法
Sep 28 #PHP
PHP自定义错误用法示例
Sep 28 #PHP
PHP构造函数与析构函数用法示例
Sep 28 #PHP
PHP设计模式之工厂模式与单例模式
Sep 28 #PHP
PHP类相关知识点实例总结
Sep 28 #PHP
PHP 闭包详解及实例代码
Sep 28 #PHP
You might like
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python实现二分法算法实例
2015/02/02 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
Python实时获取cmd的输出
2015/12/13 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
Python运行异常管理解决方案
2020/03/09 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
如何做好总经理助理
2013/11/12 职场文书
会计专业的自荐信
2013/12/12 职场文书
关于读书的演讲稿
2014/05/07 职场文书
留学推荐信范文
2014/05/10 职场文书
建筑管理专业求职信
2014/07/28 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android