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脚本数据库功能详解(下)
Oct 09 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
Oct 09 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
PHP微商城开源代码实例
Mar 27 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 PHP
php中的buffer缓冲区用法分析
May 31 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 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 file_get_contents函数轻松采集html数据
2010/04/22 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python中encode()方法的使用简介
2015/05/18 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
类如何去实现接口
2013/12/19 面试题
中英文自我评价常用句型
2013/12/19 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL