为了账号安全,请及时绑定邮箱和手机立即绑定

我的二分查找函数为什么返回不了值??

<?php


function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){

//取中间的数的下标

$middleIndex=round(($leftIndex+$rightIndex)/2);  


if($leftIndex>$rightIndex){

return "查找不到";

}


if($findVal>$arr[$middleIndex]){  //当查找的值比中间的数大

binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);  //从中间数的后段查找

}elseif($findVal<$arr[$middleIndex]){  //当查找的值比中间的数小

binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);  //从中间数的前段查找

}else{

return $middleIndex;

}

}

$a=array(1,2,3,4,5,6,7,8,9);

$b=binarySearch($a,1,0,count($a)-1);

var_dump($b);

?>


正在回答

5 回答

有没有大神帮忙看看啊??

0 回复 有任何疑惑可以回复我~

另外二分查找的前提是按顺序排列的数组

0 回复 有任何疑惑可以回复我~

兄弟,你想复杂了

二分查找,是查找,不是排序,比如你想在一个不重复的数组里面查找 有没有1,然后返回它的下标,下面是代码

    function binarySearch(Array $arr, $target) {

        $low = 0;

        $high = count($arr) - 1;

        while($low <= $high) {

            $mid = floor(($low + $high) / 2);

            #找到元素

            if($arr[$mid] == $target) return $mid;

            #中元素比目标大,查找左部

            if($arr[$mid] > $target) $high = $mid - 1;

            #重元素比目标小,查找右部

            if($arr[$mid] < $target) $low = $mid + 1;

        }

        #查找失败

        return false;

    }

    $arr = array(1, 3, 5, 7, 9, 11);

    $inx = binarySearch($arr, 1);

    var_dump($inx);


0 回复 有任何疑惑可以回复我~

失误了,你有用递归方法

0 回复 有任何疑惑可以回复我~

这里是不是没加循环一直查下去,或者用递归方法一直查下去

0 回复 有任何疑惑可以回复我~
#1

qq_感谢永远有歌把心境道破_03171663 提问者

应该不是的,我前面有if判断,而且用echo输出是正常的,就是不知怎么return返回不了
2016-09-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

我的二分查找函数为什么返回不了值??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信