二分查找法

二分查找法

简介

1,二分查找法,就相当是在循环中边比较边排除的一种搜索定位的方法,循环次数比我们平时的逐步搜索少,性能高

2,简单来讲,就是在必须是有序的序列中,寻找某个值,通过一分为二的比较排除,减少比较次数

3,每次排除都把所有的情况分成"可能"和"不可能"两种,然后抛弃所有"不可能"的情况.

代码实现

因为二分查找,也是在循环中比较查找,所以一定少不了循环。
首先就会想到用循环和递归(其实递归本质上也是一种循环)。
在不断的循环比较中,$min和$max会越来越接近,到最后达到一致或者违背序列。这个也正好就是循环条件或者递归条件
核心就是在每次比较之后对$min,$max,$mid的处理。

代码示例

<?php
    header('content-type:text/html;charset=utf-8');
    //二分查找法
    $test_arr = array(1,2,4,5,6,7,8,9,13,35,46,67,79,123,345,567,678,879);
    echo "<pre>";
    print_r($test_arr);

    //**方法1,循环**
    function binarySearch($arr,$target)
    { 
        $min = 0;
        $max = count($arr)-1;
        while($arr[$min]<=$arr[$max])
        { 
            $mid = floor(($min+$max)/2);
            if($arr[$mid] == $target){ 
                return $mid;
            }elseif($arr[$mid] < $target){ 
                $min = $mid+1;
            }else{ 
                $max = $mid-1;
            }
        }
        return '数组不符合条件';
    }
    //方法2,递归
    function binarySearchRecursion(&$arr,$min,$max,$target)
    {  
        if($arr[$min] <= $arr[$max]){ 
            $mid = floor(($min+$max)/2);
            if($arr[$mid] == $target){ 
                return $mid;
            }elseif($arr[$mid] < $target){ 
                return binarySearchRecursion($arr,$mid+1,$max,$target);
            }else{ 
                return binarySearchRecursion($arr,$min,$mid-1,$target);
            }
        }
    }

    $res = binarySearchRecursion($test_arr,0,17,5);
    echo $res;
?>

总结:

其实递归的方法可以不要$min,$max参数,在比较完成后直接把数组处理后传入即可。

复习:

array_slice()   //取出一段
array_splice()  //去掉一部分并且用其他的替代
array_chunk()   //分割
floor()         //四舍五入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值