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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php测试kafka项目示例
Feb 06 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 组件化编程技巧
2009/06/06 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
python单例模式实例分析
2015/04/08 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
调解协议书
2014/04/16 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
2015年药店工作总结
2015/04/20 职场文书
话题作文之呼唤
2019/12/18 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
配置Kubernetes外网访问集群
2022/03/31 Servers
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android