PHP实现二分查找,详解

/**
 * 注意:二分法的前提是,需要数组是有序的
 */
$arr_list = [10, 11, 14, 16, 18, 19, 21, 29, 30, 36, 38, 42, 43, 47, 49, 50, 53, 54, 57, 80, 84, 94, 96, 102, 105, 107, 120, 125, 129, 138, 139, 140, 150, 188, 190, 200];

sort($arr_list);

/**
 * @param $arr
 * @param $num
 * @return int
 */
function desc($arr, $num)
{
    $start = 0;
    $end = count($arr) - 1;//获取长度-1

    while ($start < $end) {
        $mid = intval(($end + $start) / 2);
        if ($arr[$mid] == $num) {

            return $mid;
        } elseif ($arr[$mid] < $num) {
            //说明查找目标在下半区
            $start = $mid;
        } elseif ($arr[$mid] > $num) {
            //说明查找目标在上半区
            $end = $mid;
        }

    }
    return -1;
}

$mid = desc($arr_list, 102);

print_r($arr_list[$mid]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值