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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
深入解析php模板技术原理【一】
Jan 10 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
Yii框架弹出框功能示例
Jan 07 PHP
分析php://output和php://stdout的区别
May 06 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 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可逆加密/解密函数分享
2012/09/25 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
django批量导入xml数据
2016/10/16 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
python 负数取模运算实例
2020/06/03 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
后勤人员自我鉴定
2013/10/20 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
小学生作文批改评语
2014/12/25 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python