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 程式大小
Dec 06 PHP
一道关于php变量引用的面试题
Aug 08 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
php堆排序(heapsort)练习
Nov 13 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
php原生数据库分页的代码实例
Feb 18 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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中echo和print的区别
2014/08/28 PHP
php微信支付接口开发程序
2016/08/02 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
javascript 播放器 控制
2007/01/22 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
python中__call__方法示例分析
2014/10/11 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
党员作风建设自查报告
2014/10/23 职场文书
离婚律师函范本
2015/05/27 职场文书
2019财务转正述职报告
2019/06/27 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技