php如何实现二分查找法

php如何实现二分查找法

内容导读

收集整理的这篇技术教程文章主要介绍了php如何实现二分查找法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2156字,纯文字阅读大概需要4分钟

内容图文

PHP实现二分查找法

二分查找法需要的数组是一个有序的数组,假设我们的数组是一个递增的数组,首先,我们需要找到数组的中间位置。

一、要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。

二、如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位

置的值,此时结束位置的值应该是我们此时的中间位置。

三、反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之

后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。

四、或者中间值等于最初的起始位置,或结束位置(此时说明给定值未找到)

下面我们来用代码实现

1、循环实现

function getValue($num,$arr){//查找数组的中间位置$length=count($arr);$start=0;$end=$length;$middle=floor(($start+$end)/2);//循环判断while($start>$end-1){if($arr[middle]==$num){return middle+1;}elseif($arr[middle]<$num){//如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段//所以起始位置变成当前的middle的值,end位置不变。$start=$middle;$middle=floor(($start+$end)/2);}else{//反之$end=$middle;$middle=floor(($start+$end)/2);}}return false;}

2、递归实现

/*

 * 从数组中获取元素值

 * @param1 int $num,要查找的目标值

 * @param2 array $arr,要查找的数组

 * @param3 int $start,查找的起始位置

 * @param4 int $end,查找的结束位置

 * @return mixed,找到了返回位置,没找到返回false

 */

 function getValue4($num,$arr,$start = 0,$end = 100){



//采用二分法查找



$middle = floor(($end + $start) / 2);



//判断



if($arr[$middle] == $num){





//已经找到了,递归的出口





return $middle + 1;



}elseif($arr[$middle] < $num){





//要查找的元素在数组的后半段





$start = $middle + 1;





//边界值





if($start >= $end){







//没有找到,但是已经超出边界值,递归出口







return false;





}





//调用自己去查找:递归点





return getValue4($num,$arr,$start,$end);

//getValue4($num,$arr,51,100)



}else{





//要查找的元素在数组的前半段





$end = $middle - 1;





//判断边界值





if($end < 0)return false;





//调用自己:递归点





return getValue4($num,$arr,$start,$end);

//getValue4($num,$arr,0,49)



}



//都没有找到



return false;

 }

以上内容仅供参考!

推荐教程:PHP视频教程

以上就是php如何实现二分查找法的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php如何实现二分查找法全部内容,希望文章能够帮你解决php如何实现二分查找法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com