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