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 相关文章推荐
PHP 操作文件的一些FAQ总结
Feb 12 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 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 版本]
2007/03/20 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
图片onload事件触发问题解决方法
2011/07/31 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
销售员自我评价怎么写
2013/09/19 职场文书
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
物业电工岗位职责
2013/11/20 职场文书
关于打架的检讨书
2014/01/17 职场文书
小学教师办公室制度
2014/02/03 职场文书
升旗仪式演讲稿
2014/05/08 职场文书