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 相关文章推荐
cache_lite试用
Feb 14 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
两款万能的php分页类
Nov 12 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python----数据预处理代码实例
2019/03/20 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
用python批量下载apk
2020/12/29 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
团支书的期末学习总结自我评价
2013/11/01 职场文书
团日活动总结模板
2014/06/25 职场文书
普通话宣传标语
2014/06/26 职场文书
冰雪公主观后感
2015/06/16 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
vue动态绑定style样式
2022/04/20 Vue.js