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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 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
使用Composer安装Yii框架的方法
2016/03/15 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
javascript Event对象详解及使用示例
2013/11/22 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python写xml文件的操作实例
2014/10/05 Python
python+opencv实现动态物体识别
2018/01/09 Python
对Python3中的input函数详解
2018/04/22 Python
python flask实现分页的示例代码
2018/08/02 Python
Python基础教程之异常详解
2019/01/10 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
公司JAVA开发面试题
2015/04/02 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
python异步的ASGI与Fast Api实现
2021/07/16 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL