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 字符串 小常识
Jun 05 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 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
操作Oracle的php类
2006/10/09 PHP
给php新手谈谈我的学习心得
2007/02/25 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
Django配置跨域并开发测试接口
2020/11/04 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
行政总经理岗位职责
2013/12/05 职场文书
劳动模范事迹材料
2014/01/19 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
合作合同协议书范本
2015/01/27 职场文书
化妆品促销活动总结
2015/05/07 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
2016年感恩节寄语
2015/12/07 职场文书
人民调解协议书
2016/03/21 职场文书
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android