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 相关文章推荐
phpwind中的数据库操作类
Jan 02 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
php ajax实现文件上传进度条
Mar 29 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 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中final关键字用法分析
2016/12/07 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
php连接mysql数据库
2017/03/21 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
JS中递归函数
2016/06/17 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
python和c语言的主要区别总结
2019/07/07 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
python 下载文件的几种方法汇总
2021/01/06 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
大学校园生活自我鉴定
2014/01/13 职场文书
地球一小时倡议书
2014/04/15 职场文书
大学生应聘求职信
2014/05/26 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
食品质检员岗位职责
2015/04/08 职场文书
看雷锋电影观后感
2015/06/10 职场文书
关于环保的广播稿
2015/12/17 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python