什么是二分法

二分法在数学上是无限逼近某个临界值,尽管在编程上不太明白具体的应用场景,但是稍微了解一下吧!

>起点下标 leftIndex (index英文释义 索引)

<结束下标 rightIndex

^中间下标 midIndex

加粗数字:要查找的值 findVal

需求:查找801在数组中的下标。

[     1,     3,    5,    19,    29,    88,    102,    709,    801,    805    ]

      >                             ^                                                <

如果中间下标的值29小于目标801,说明29之前的一半数据不在查找范围了,将>移到29的位置

-------------------------------------------------------------------------

[     1,     3,    5,    19,    29,    88,    102,    709,    801,    805    ]

                                     >                ^                              <

中间下标的值102还是小于801,继续把>移到102处

---------------------------------------------------------------------------

 

[     1,     3,    5,    19,    29,    88,    102,    709,    801,    805    ]

                                                        >        ^                  <

继续

---------------------------------------------------------------------------

[     1,     3,    5,    19,    29,    88,    102,    709,    801,    805    ]

                                                                   >       ^          <

中间下标的值刚好和目标相等,查找完毕,返回中间下标。

 

$arr = [1,2,3,4,5,6,7,8,9,10];
//查找3的下标
function erfenfa($arr,$findVal,$leftIndex,$rightIndex){
if($leftIndex > $rightIndex){
echo "找不到";
return;
}
$midIndex = floor(($leftIndex + $rightIndex)/2);
$midVal = $arr[$midIndex];


if($midVal > $findVal)
{
erfenfa($arr, $findVal, $leftIndex, $midIndex);
}
else if($midVal < $findVal)
{
erfenfa($arr, $findVal, $midIndex, $rightIndex);
}
else
{
echo '找到了,下标为'+$midIndex;
return;
}
}


erfenfa($arr,3,0,9);//2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值