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作的文本留言本的例子(六)
Oct 09 PHP
PHP集成FCK的函数代码
Sep 27 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
php实现短信发送代码
Jul 05 PHP
PHP字典树(Trie树)定义与实现方法示例
Oct 09 PHP
PHP 7.4中使用预加载的方法详解
Jul 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
提取HTML标签
2006/10/09 PHP
sae使用smarty模板的方法
2013/12/17 PHP
php按单词截取字符串的方法
2015/04/07 PHP
php实现三级级联下拉框
2016/04/17 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
详解vue-cli3使用
2018/08/14 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Python 文件操作实现代码
2009/10/07 Python
Python制作爬虫采集小说
2015/10/25 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python实现BackPropagation算法
2017/12/14 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
python logging 日志的级别调整方式
2020/02/21 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
生产部管理制度
2014/01/31 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
法学求职信
2014/06/22 职场文书
小学班主任教育随笔
2015/08/15 职场文书
环保建议书作文400字
2015/09/14 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL