> 백엔드 개발 > PHP 튜토리얼 > 这样写二分查找如何不对呢

这样写二分查找如何不对呢

WBOY
풀어 주다: 2016-06-13 11:23:34
원래의
884명이 탐색했습니다.

这样写二分查找怎么不对呢

<br /><php <br />function binarySearch($arr,$a){<br />    <br />    $low = 0;<br />    $high = count($arr)-1;<br />    $mid = ceil(($low+$high)/2);<br /><br />while($low<=$high){<br /><br />    if($a==$arr[$mid]){<br />    	echo "查找的数的位置是第"."$mid";<br />    }<br /><br />    if($a>$arr[$mid]){<br /><br />        $high = count($arr)-1;<br />    	$low = $mid+1;<br />	    $mid = ceil(($low+$high)/2);<br />    }<br /><br />    if ($a<$arr[$mid]) {<br />    	<br />    	$low = 0;<br />    	$high = $mid-1;<br />    	$mid = ceil(($low+$high)/2);<br />    }<br />  }<br />}<br />$arr1 = array(5,7,9,10,12,16,19);<br />binarySearch($arr1,12);<br /><br />?>
로그인 후 복사


------解决方案--------------------
本帖最后由 xuzuning 于 2013-03-30 17:42:33 编辑

function binarySearch($arr,$a){

$low = 0;
$high = count($arr)-1;
$mid = ceil(($low+$high)/2);
$n = 0;防止死循环的措施
while($low<=$high && $n++){
if($a==$arr[$mid]){
echo "查找的数的位置是第"."$mid";
break;
}

if($a>$arr[$mid]){

$high = count($arr)-1;
$low = $mid-1;//注意这里
$mid = ceil(($low+$high)/2);
}

if ($a<$arr[$mid]) {

$low = 0;
$high = $mid+1;//注意这里
$mid = ceil(($low+$high)/2);
}
}
}
------解决方案--------------------
按 php 实际可写作
function binarySearch($arr,$a){<br />  $low = 0;<br />  $high = count($arr)-1;<br />  $mid = ceil(($low+$high)/2);<br />  $num = count($arr);<br />  while($low<=$high && $num--){<br />    if($a==$arr[$mid]){<br />      echo "查找的数的位置是第"."$mid";<br />      break;<br />    }<br />    list($low, $high) = $a > $arr[$mid] ? array($mid, $high) : array($low, $mid);<br />    $mid = ceil(($low+$high)/2);<br />  }<br />}<br />
로그인 후 복사

------解决方案--------------------

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿