PHP实现二分查找,详解

本文深入探讨了二分查找算法的实现原理,通过一个具体的PHP示例代码,展示了如何在一个有序数组中查找特定元素的位置。文章详细解释了二分查找算法的步骤,包括初始化搜索范围、计算中间位置、比较目标值与中间值以及调整搜索范围,直至找到目标值或确定目标值不存在于数组中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 注意:二分法的前提是,需要数组是有序的
 */
$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]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值