ホームページ >バックエンド開発 >PHPチュートリアル >このように二分探索を書くのがなぜ間違っているのでしょうか?

このように二分探索を書くのがなぜ間違っているのでしょうか?

WBOY
WBOYオリジナル
2016-06-13 12:47:281128ブラウズ

このような二分探索を書くのはなぜ間違っているのでしょうか?

<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 によって書かれました。 関数 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";
休憩;
}

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

-----解決策---------
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。