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 相关文章推荐
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
初识PHP
Sep 28 PHP
nginx下安装php7+php5
Jul 31 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP生成图表pChart的示例解析
Jul 31 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 rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
vue eslint简要配置教程详解
2019/07/26 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
Python中Numpy mat的使用详解
2019/05/24 Python
Django配置文件代码说明
2019/12/04 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
新电JAVA笔试题目
2014/08/31 面试题
百度JavaScript笔试题
2015/01/15 面试题
学前教育毕业生自荐信范文
2013/12/24 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
大学生创业感言
2014/01/25 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
我的中国心演讲稿
2014/09/04 职场文书
党支部承诺书
2015/01/20 职场文书
责任书格式
2015/01/29 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
《火烧云》教学反思
2016/02/23 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server