二分查找级思路

//二分查找。定义的数组必须为有序数组,加入要找7,先得到数组最中间的那个数,$arr中间数为9,用9跟7比,如果比7大,从左边找,比7小从右边找
$arr=[1,3,5,7,9,11,13,15,19];
/**
 * 二分查找 递归
 * @param $arr 
 * @param $search为查找的值
 * @return string
 *
 */
function search($arr,$search){

    $middle=ceil(count($arr)/2-1);
    if(count($arr)<1){
        return ('没有找到');
    }
    //直接找到
    if($arr[$middle]==$search){
        return $arr[$middle];
    }
    //查找的值 比中间值小   从左边部分继续找
    if($arr[$middle]>$search){
        $arr=array_slice($arr,0,$middle);
//       var_dump($arr);exit;
        return search($arr,$search);
    }
    //查找的值 比中间值大   从右边部分继续找
    if($arr[$middle]<$search){
        $arr=array_slice($arr,$middle+1);
        return search($arr,$search);
    }
    return '没找到';
}

#二分查找 非递归
function search2($arr,$search){
    $low=0;
    $high=count($arr)-1;
    while($low<=$high){
        $mid=ceil(($low+$high)/2);
//        var_dump($mid);exit;
        if($arr[$mid]==$search){
            return $search;
        }
        if($arr[$mid]>$search){
            $high=$mid-1;
        }
        if($arr[$mid]<$search){
            $low=$mid+1;
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_42262935/article/details/80915811