1. 云栖社区>
  2. PHP教程>
  3. 正文

二分法的基础理解

作者:用户 来源:互联网 时间:2017-12-01 14:20:27

基础二分法理解

二分法的基础理解 - 摘要: 本文讲的是二分法的基础理解, //二分法--递归(已知一个数组,如何取得某个值的下标)$arr = array(3,9,23,54,1111,11111111,55555555);//数组、最小的键值、最大的键值、要搜索的数echo binaryRecursiv




//二分法--递归(已知一个数组,如何取得某个值的下标)$arr = array(3,9,23,54,1111,11111111,55555555);//数组、最小的键值、最大的键值、要搜索的数echo binaryRecursive($arr, 0, count($arr)-1, 55555555);//关键点:为什么其中要中间值+1和-1那?//仅个人方便理解:第一次中间值若是和搜索的值相等的话就直接返回出去了,即便+-1再取中间值那么也不影响找此数的位置,而且第一次的中间要了没有用了,所以说+-1在接着递归查找function binaryRecursive(&$arr,$low,$top,$target){    //判断数组最小的下标是否小于最大的下标(这是前提条件,必须是一个有值的数组)    while($low<=$top){        //取得最小值最大值的和除2        $mid = ceil(($low+$top)/2);//第一次中间值  下标为3的值为54        //如果获得的中间值的下标的值和要搜索的值相等,则已得到想要的结果,返回此值的下标        if($arr[$mid]==$target){            return $mid;            //如果当前中间值的下标的值小于要搜索的值时        }elseif($arr[$mid]<$target){//54<55555555            //那么递归再次调用此方法(第一个数依然传$arr,要传的第二个数的最小值下标应该在中间值的右边(第一次),即最小值为中间值+1[$mid+1],最大的值依然是$top,搜素值依然是$target)            return binaryRecursive($arr,$mid+1,$top,$target);        }else{            //反之,则剩下一种情况:当前中间值的下标的值大于要搜索的值($target<$arr[$mid])            //那么递归再次调用此方法(第一个数依然传$arr,要传的第二个数的最小值下标应该是第一次传的$low,即为0,第三个数最大值的下标应该在中间值的左边(第一次),即最大值为中间值-1[$mid-1],搜素值依然$target)            return binaryRecursive($arr,$low,$mid-1,$target);        }    }    //当不走while判断则返回提示    header("content-type:text/html;charset=utf-8");    return "查找的数不在当前数组中";}

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索基础 , 二分法 理解 ,以便于您获取更多的相关知识。