什么是二分法

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

>起点下标 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

猜你喜欢

转载自blog.csdn.net/yt_php/article/details/81056219