码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找法

时间:2020-08-20 19:22:52      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:func   col   ram   二分查找   span   有序   就是   递增   二分   

<?php
/**
 * @param array $arr    递增数字数组
 * @param int   $number 待查找的数字
 * @return int          返回找到的键
 */
function binary_search($arr,$number){
    // 非数组或数组为空,返回-1
    if(!is_array($arr)||empty($arr)){
        return -1;
    }
    // 初始化变量值
    $len = count($arr);
    $lower = 0;
    $high = $len - 1;
    // 最低点比最高点大就退出
    while($lower<=$high){
        //以中间点作为参照点
        $middle = intval(($lower+$high)/2);

        if($number < $arr[$middle]){
            $high = $middle - 1;  // 查找数比参照点小,则舍去右边
        }else if ($number > $arr[$middle]){
            $lower = $middle + 1; // 查找数比参照点大,则舍去左  边
        }else{
            return $middle;
        }
    }
    //未找到,返回-1
    return -1;
}
$arr = [1,3,5,7,9,11,16,26,27,29,34,35,39,65,97];
$find_key = binary_search($arr,27);
echo ‘$arr[‘.$find_key.‘]=‘.$arr[$find_key];

在有序数组中如果用暴力算法查找,也就是阻隔遍历比较,那么时间复杂度是O(n);

但是用二分法查找,每次都会舍弃一般查找区间,所以复杂度是O(logn);

二分查找法

标签:func   col   ram   二分查找   span   有序   就是   递增   二分   

原文地址:https://www.cnblogs.com/bhjqn/p/13525739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!