这篇文章主要介绍了PHP二分查找算法的实现方法,简单分析了二分查找算法的原理,并结合具体实例形式给出了php基于循环与递归两种方法实现二分查找的相关操作技巧,需要的朋友可以参考下
本文实例讲述了PHP二分查找算法的实现方法。分享给大家供大家参考,具体如下:
二分查找法需要数组是一个有序的数组
假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.
1. 要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。
2. 如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。
3. 反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。
4. 或者中间值等于最初的起始位置,或结束位置(此时说明给定值未找到),下面我们来用代码实现~
//循环实现 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; }
//递归实现 /* * 从数组中获取元素值 * @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中文网其他相关文章!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!