首页 > 试题广场 >

使用二分查找法,查找在一维数组中键值的对应键名,例:查找ar

[问答题]

使用二分查找法,查找在一维数组中键值的对应键名,

例:查找 array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 数组中键值为 12 的键名

/**
     * 二分查找法
     * 使用前提是有序数组
     */
    public function binarySearch($value = 12, $arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ){
        $low = 0;    //数组下限下标
        $high = count($arr)-1;    //数组上限下标

        // 注意凡是使用到while的时候,一定要防备无限循环的时候,注意终止循环的判断。
        while($low <= $high){
            //获取中间比较的中间下标(强制整形)
            $middle = intval(($low + $high)/2);

            if($value < $arr[$middle]){    //目标值 < 中间值 ,上限减1
                $high = $middle - 1;
            }elseif ($value > $arr[$middle]){    //目标值 > 中间值 ,下限加1
                $low = $middle + 1;
            }else{
                return $middle;     //目标值 = 中间值,匹配成功返回下标值
            }
        }

        return -1;
    }

发表于 2021-02-22 15:51:42 回复(0)