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中利用XML技术构造远程服务(下)
Oct 09 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
php遍历目录viewDir函数
Dec 15 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
PHP语法小结之基础和变量
Nov 22 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
PHP根据key删除数组中指定的元素
Feb 28 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中使用xmlreader读取xml数据示例
2014/12/29 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python利用IPython提高开发效率
2016/08/10 Python
Python numpy 常用函数总结
2017/12/07 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python如何实现异步调用函数执行
2019/07/08 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
五四青年节演讲稿
2014/05/26 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
理解python中装饰器的作用
2021/07/21 Python
pandas中关于apply+lambda的应用
2022/02/28 Python