• 在大型数组中快速定位想要的元素

顺序查找

$arr = [1,3,6,8,23,68,100];
// 顺序查找:从数组第一个元素开始,挨个匹配
function check_order($arr, $num) {
    //全部匹配
    for($i = 0,$len = count($arr); $i < $len; $i++) {
        //判断
        if($arr[$i] == $num) {
            return $i;
        }
    }
    return false;
}

二分查找

要求线性表中的节点按关键字值升序或降序排序
折半

$arr = [1,3,6,8,23,68,100];
$res = 3;

function check_break($arr, $res) {
    //1、 得到数组的边界
    $right = count($arr);
    $left = 0;

    //2、循环匹配
    while($left <= $right) {
        //3、得到中间位置
        $middle = floor(($right + $left) / 2);
        //4、匹配数据
        if($arr[$middle] == $res) {
            return $middle + 1;
        }
        //5、没有找到
        if($arr[$middle] < $res) {
            //值在右边
            $left = $middle + 1;
        }else{
            $right = $middle - 1;
        }
    }
    return false;
}


Scroll to Top