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的bbs设计(三)
Oct 09 PHP
PHP与SQL注入攻击[二]
Apr 17 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
[原创]PHP实现SQL语句格式化功能的方法
Jul 28 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
js实现购物车功能
2018/06/12 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
Python Deque 模块使用详解
2014/07/04 Python
详解Python中的join()函数的用法
2015/04/07 Python
Python正则表达式完全指南
2017/05/25 Python
分分钟入门python语言
2018/03/20 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
django中瀑布流写法实例代码
2019/10/14 Python
python生成并处理uuid的实现方式
2020/03/03 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
《哪吒闹海》教学反思
2014/02/28 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
交通违章检讨书
2014/09/21 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
大学生自荐信范文
2015/03/05 职场文书
入党积极分子考察意见
2015/06/02 职场文书
企业财务管理制度范本
2015/08/04 职场文书