二分探索の基本的な考え方は、順序付けられた配列の中央の値と探している値を比較することです。探している値が配列の中央の値よりも大きい場合、それはすべての値を意味します。順序付けされた配列の中間値より前の値はすべて検索対象の値より小さいため、配列の中間値より前の値をすべて除外し、中間値から必要な値を検索し続けることができます。コードは次のように実装されます:
//二分探索
function bin_search($array,$search){
$low=0;
$height=count($array)-1;//配列の長さを取得
while($low<=$height){
$mid =floor(($low+$height)/2);//中央の数値を取得して、floor タイプにキャストし、エラーを防止します
if($array[$mid]==$search){
return $mid+1;//見つかったシリアル番号を返す
}else if($array[ $mid]<$search){
//中間の値が小さい場合値をチェックした場合、$mid の左側の値はすべて $search 未満です。このとき、$mid は $low
$ low=$mid+1;
}else に代入される必要があります。 if($array[$mid]>$search){
//このとき、真ん中の値がチェックした値より大きいということは、$midより右側の値はすべては $search より大きいため、この時点では $mid を $height に割り当てる必要があります
$height=$mid-1;
}
return "Search failed";//検索は失敗しました。項目が配列値に存在しません
}
}
$arr=array(1,4,6,33,75,88,89,93);
echo bin_search($arr, 33);
echo bin_search($arr,66);?>