Rumah >pembangunan bahagian belakang >tutorial php > 这样写二分查找如何不对呢

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

WBOY
WBOYasal
2016-06-13 12:47:281130semak imbas

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

<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&& $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          
        $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 />

------解决方案--------------------
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn