PHP基于二分法实现数组查找功能示例【循环与递归算法】

 更新时间:2017年12月11日 11:40:17   作者:根号五  
这篇文章主要介绍了PHP基于二分法实现数组查找功能,结合实例形式分析了while循环与递归调用算法实现二分查找功能的相关实现技巧,需要的朋友可以参考下

本文实例讲述了PHP基于二分法实现数组查找功能。分享给大家供大家参考,具体如下:

二分法。分别使用while循环的方法和递归调用的方法。

<?php
// 二分法的使用数组必须是有序的,或升序,或降序
$arr = array(
  1, 3, 5, 7, 9, 13
);
// 递归调用(相比较好理解
function bsearch_r($v, $arr, $low, $high){
  if ($low > $high) {// 先判断结束条件
    return -1;
  }
  $i = intval(($high + $low)/2);
  if ($arr[$i] > $v){
    return bsearch_r($v, $arr, $low, $i-1);// 递归
  } else if ($arr[$i] < $v){
    return bsearch_r($v, $arr, $i+1, $high);
  } else {
    return $i;
  }
}
echo bsearch_r(1, $arr, 0, count($arr)-1);// 0
echo '<hr/>';
echo bsearch_r(14, $arr, 0, count($arr)-1);// -1
echo '<hr/>';
// while循环
function bsearch($v, $arr){
  $low = 0;
  $high = count($arr)-1;// 使用下标,注意减去1
  // 注意凡是使用到while的时候,一定要防备无限循环的时候,注意终止循环的判断。
  while($low <= $high){// 比如$low<=$high,这个等于号必须有。
    $i = intval(($high + $low)/2);
    if ($arr[$i] > $v){
      $high = $i-1;
    } else if ($arr[$i] < $v){
      $low = $i+1;
    } else {
      return $i;
    }
  }
  return -1;// 找不到的时候返回-1
}
echo bsearch(13, $arr);// 5
echo '<hr/>';
echo bsearch(14, $arr);// -1

运行结果:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php获取一个变量的名字的方法

    php获取一个变量的名字的方法

    将当前变量的值保存到一个临时变量中,然后再对原变量赋唯一值,以便查找出变量的名字,找到名字后,将临时变量的值重新赋值到原变量
    2014-09-09
  • 如何直接访问php实例对象中的private属性详解

    如何直接访问php实例对象中的private属性详解

    这篇文章主要给大家介绍了关于如何直接访问php实例对象中private属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • php filter协议使用方法

    php filter协议使用方法

    php://filter是一种设计用来允许过滤器程序在打开时成为流的封装协议。这对于单独具有完整功能的文件函数非常有用,否则就没有机会在读取内容之前将过滤器应用于流之上
    2022-12-12
  • 详解PHP优化巨量关键词的匹配

    详解PHP优化巨量关键词的匹配

    本文完整介绍了我的实现方式,如何将需要运行十小时的任务优化到十分钟以内。虽然实现语言是PHP,但本文介绍的更多的思想,应该能给大家一些帮助。
    2021-05-05
  • PHP中引用类型和值类型功能与用法示例

    PHP中引用类型和值类型功能与用法示例

    这篇文章主要介绍了PHP中引用类型和值类型功能与用法,简单分析了php引用类型和值类型的概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-02-02
  • THINKPHP2.0到3.0有哪些改进之处

    THINKPHP2.0到3.0有哪些改进之处

    这篇文章主要介绍了THINKPHP2.0到3.0有哪些改进之处,个人总结了6小点,需要的朋友可以参考下
    2015-01-01
  • PHP常见加密函数用法示例【crypt与md5】

    PHP常见加密函数用法示例【crypt与md5】

    这篇文章主要介绍了PHP常见加密函数用法,结合实例形式分析了crypt与md5函数进行加密操作相关使用技巧与注意事项,需要的朋友可以参考下
    2019-01-01
  • php小经验:解析preg_match与preg_match_all 函数

    php小经验:解析preg_match与preg_match_all 函数

    本篇文章是对php中的preg_match函数与preg_match_all函数进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php 使用GD库为页面增加水印示例代码

    php 使用GD库为页面增加水印示例代码

    这篇文章主要介绍了php 使用GD库为页面增加水印的具体实现,需要的朋友可以参考下
    2014-03-03
  • php对大文件进行读取操作的实现代码

    php对大文件进行读取操作的实现代码

    在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法
    2013-01-01

最新评论