PHP实现二分查找法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$arr = array(1,43,54,62,21,66,32,78,36,76,39);

/ 二分查找法
function binary_search($arr, $value, $start = 0, $end = null)
{
    if ($end == null) {
        $end = count($arr) - 1;
    }

    $index = floor(($start + $end) / 2);
    $base_num = $arr[$index];

    if ($value < $base_num) {
        return binary_search($arr, $value, $start, $index-1);
    } elseif ($value > $base_num) {
        return binary_search($arr, $value, $index+1, $end);
    } else {
        return $index;
    }
}

$res = binary_search($arr, 54);
var_dump($res);