二分查找

<?php
declare(strict_types=1);

function binary_search(Array $array, $search) : int{
    $len = count($array);
    $op = 0;
    $ed = $len - 1;
    while($op <= $ed){
        //取中间数  前一个
        $center = intval(($op+$ed)/2); 
        //对比目标数和中间数的大小
        //把数组分成两个取 
        if($search > $array[$center]){
            // 当查询的数大于中位数 则 取中位数后半段(不包含中位数)
            $op = $center+1;
        }elseif($search < $array[$center]){
            // 当查询的数小于中位数 则 取中位数前半段(不包含中位数)
            $ed = $ed-1;
        }else{
            // 当查询的数等于于中位数 则范围中位数下标
            return $center;
        }
    }
    // 找不到的情况 返回-1
    return -1;
}

$a = [1,2,5,6,7,9,12,15,25,39,50,60,85];
var_dump(binary_search($a,39));

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注