百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 学习PHP查寻一列有序数组可否包括某值的办法
分享文章到:

学习PHP查寻一列有序数组可否包括某值的办法

发布时间:09/01 来源:未知 浏览: 关键词:

问题:关于一列有序数组,怎样推断给出的一个值,该值可否存在于数组。

思绪:推断可否存在,最简便是,直接轮回该数组,对每一个值停止比力。但是关于有序数组来说,这样写就完全没有益用好“有序”这一特点。

相关学习引荐:php编程(视频)

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

//有序数组为

$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查寻一列有序数组可否包括某值的办法的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板