PHP实现二分查找算法

二分查找算法的前提:查找的数列为有序数列

/**
     * @param $arr // 查询序列
     * @param $target  //要查找的值
     * @param $low // 序列起始位置
     * @param $high  // 序列结束位置
     * @return false|float|int
     */
function BinarySort($arr,$target,$low,$high)
{
    $len = count($arr);
    if(!$len) return -1;
    $middle = ceil(($low+$high)/2);  // 找到中间位置与目标值作比较
    if($low > $high) return -1;  // !!!很重要,如果查找的数据不存在,这是退出递归的条件
    if($arr[$middle]==$target) return $middle; 
    else if($arr[$middle]<$target) return BinarySort($arr,$target,$middle+1,$high);  // 中间位置所在值大于查找值,则在中间位置之后的序列查询即可
    else return BinarySort($arr,$target,$low,$middle-1);  // 反之,在中间位置之前的序列查找
}

$arr = [1,2,3,5,6,8,9];
echo BinarySort($arr,8,0,count($arr)-1);
posted @ 2021-07-06 17:52  米饭!大米饭  阅读(163)  评论(0编辑  收藏  举报