
検索アルゴリズムのひとつ、二分探索(バイナリサーチ)を行うアルゴリズムをメモ。
-
<?php
-
-
class Search {
-
-
/*
-
* 二分探索を行う
-
*
-
* @return 探索値と一致する探索要素のキー、一致がなければNULL
-
*/
-
function binarySearch($targetArr, $searchNum) {
-
-
$low = 0;
-
$high =
count($targetArr) -
1;
-
-
while ($low <$high) {
-
-
$mid = ($low + $high) / 2;
-
-
if ($targetArr[$mid] == $searchNum) {
-
return $mid;
-
}
-
-
if ($targetArr[$mid] <$searchNum) {
-
$low = $mid + 1;
-
} else {
-
$high = $mid;
-
}
-
}
-
-
return NULL;
-
}
-
}
-
-
//検索値
-
$searchNum = 5;
-
-
//検索対象要素
-
$targetArr =
array(38,
72,
93,
41,
5,
18,
35,
86,
49,
17,
73,
782,
190);
-
-
-
$mid = Search::binarySearch($targetArr, $searchNum);
-
-
if ($mid === NULL) {
-
-
} else {
-
echo "探索結果は".
$targetArr[$mid].
"です";
-
}
終わり。