PHP查找一列有序数组是否包含某值的方法


Posted in PHP onFebruary 07, 2020

问题:对于一列有序数组,如何判断给出的一个值,该值是否存在于数组。

思路:判断是否存在,最简单是,直接循环该数组,对每一个值进行比较。但是对于有序数组来说,这样写就完全没有利用好“有序”这一特点。

所有我们使用到“二分法查找”,

//有序数组为

$arr = array(2,5,66,87,954,1452,5865);

//查找值

$str = 1452;

//我们先定义 三个参数

$front = 0;//一个开始值下标

$end = count($arr) - 1;//一个结束值下标

$mid = intval(($front + $end) / 2);//中间值下标

1、第一次比较,我们直接判断查找值str是否等于中间值mid,如果等于 直接返回 true;

2、如果查找值str大于中间值mid,则说明查找值str可能在中间值的右边,即对开始值front需重新赋值 = 中间值mid + 1,结束值end不用变,依次中间值mid为新的开始值 + 结束值;

3、如果查找值str小于中间值mid,则说明查找值str可能在中间值的左边,即开始值不用变,结束值end需重新赋值 = 中间值 - 1,依次中间值mid为开始值 + 新的结束值;

-----如上,对于传入的开始值,结束值,中间值,进行比较。一旦开始值 大于 结束值 则说明没有找到,结束查询,反之等于就返回已找到。

具体代码如下:

$str = 89;//查找值

$arr = [1,55,66,89,420];//有序数组

$ren = find($arr, $str);

echo '<pre>';

var_dump($ren);

function find($arr, $str){

 $front = 0;//开始下标

 $end = count($arr) - 1;//结束下标

 while($front <= $end){//结束值 大于 开始值 ,反之则退出

  $mid = intval(($front + $end) / 2);//中间值下标

  if($str == $arr[$mid]){

   return $mid;//存在直接返回值的下标

  }

  if($str > $arr[$mid]){

   $front = $mid + 1;//在前面

  }

  if($str < $arr[$mid]){

   $end = $mid - 1;//在后面

  }

 }

 return false;

}

返回结果:89为第四个元素值下标3

int(3)

以上就是PHP查找一列有序数组是否包含某值(二分查找)的详细内容,如果有任何补充可以联系三水点靠木小编。

PHP 相关文章推荐
php escape URL编码
Dec 10 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
php测试kafka项目示例
Feb 06 #PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 #PHP
PHP实现常用排序算法的方法
Feb 05 #PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 #PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 #PHP
php post换行的方法
Feb 03 #PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 #PHP
You might like
浅析PHP水印技术
2007/02/14 PHP
实用函数9
2007/11/08 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python下载懒人图库JavaScript特效
2015/05/28 Python
浅谈Python基础之I/O模型
2017/05/11 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
谈谈Python中的while循环语句
2019/03/10 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
python语言中有算法吗
2020/06/16 Python
python将数据插入数据库的代码分享
2020/08/16 Python
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
同意落户证明
2015/06/19 职场文书
爱护环境建议书
2015/09/14 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
css弧边选项卡的项目实践
2023/05/07 HTML / CSS