ホームページ  >  記事  >  バックエンド開発  >  このような二分探索を書くのがなぜ間違っているのでしょうか?

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

WBOY
WBOYオリジナル
2016-06-23 14:04:211318ブラウズ

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


ディスカッションに返信 (解決策)

function binarySearch($arr,$a){
$mid = ceil( ($low+$high)/2);
$n = 0;無限ループ
while($low<=$high && $n++ if($a= =$arr[$mid]){
$high = カウント ($ Arr) - 1;
$ Low = $ MID -1; // ここで注意してください
$ MID = CEIL (($ Low+$ High)/2); {
$low = $mid
}
を押しますphpは実際にできる書かれてください

function binarySearch($arr,$a){  $low = 0;  $high = count($arr)-1;  $mid = ceil(($low+$high)/2);  $num = count($arr);  while($low<=$high && $num--){    if($a==$arr[$mid]){      echo "查找的数的位置是第"."$mid";      break;    }    list($low, $high) = $a > $arr[$mid] ? array($mid, $high) : array($low, $mid);    $mid = ceil(($low+$high)/2);  }}


この投稿は xuzuning によって最終編集されました: 2013-03-30 17:42:33
$high = count($ arr)-1
$mid = ceil(($low+$high)/2; );
$n = 0;無限ループを防ぐための対策…
ちょっとめまいがする $r=array(1,2,3,4) などの数字が4つある場合 のようです1. $mid を見つけるには、floor を使用してください。これは理解しています。


php によると、実際には次のように記述できます。PHP code?1234567891011121314function binarySearch($arr, $a) ){ $low = カウント($arr)-1; $mid = ceil(($low+$high)/2); &&……[/quote
モデレータにはまだ感謝しなければなりません、、、

rree

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