查找算法之 - 二分查找算法 php

10 篇文章 0 订阅
5 篇文章 0 订阅
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。

1.描述

搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜 素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。
这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn) 。

2.逻辑

1、规定起始和结束位置(开始和最后的元素)
2、找到规定区间的中间数为基数,与要查找的数字进行对比
3、如果基数比要查询的数字大,则区间的结束位置为小于基数,如果基数要比查询的数字小,则区间的开始位置为大于基数
4、将重新获得的区间重复第2,3步
5、查询完成,如果查询到输出对应的键名,查询不到,输出false

3.代码

$arr=[8, 15, 20, 22, 29, 49, 50, 50, 100, 101];
function dichotomySearch($arr, $number)
{
    $arrSize = count($arr);
    //规定起始值和最终值的位置,从数组开始到数组结束
    $begin = 0;
    $end = $arrSize - 1;
    while ($begin <= $end) {
    	//计算出规定位置的中间值
        $middle = floor(($begin + $end) / 2);
        if ($number < $arr[$middle]) {
	        //如果要查找的数字小于 中间数,则 最终值 变为 中间值-1
            $end = $middle - 1;
        } elseif ($number > $arr[$middle]) {
        	//如果要查找的数字大于 中间数,则 起始值 变为 中间值+1
            $begin = $middle + 1;
        } else {
        	//如果要查找的数字等于 中间数,搜索完成
            return [$middle => $number];
        }
    }
    //搜索不到,返回false
    return false;
}
var_dump(dichotomySearch($arr, 29));

附上参考连接

菜鸟教程《十大编程算法助程序员走上高手之路》
https://www.runoob.com/w3cnote/the-friendship-algorithm-the-big-bang-theory.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值