码迷,mamicode.com
首页 > 编程语言 > 详细

二分查找算法

时间:2018-03-09 18:04:18      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:查找算法   pre   turn   sea   echo   下标   bool   array   function   

二分查找算法的前提:

  1,针对的是索引数组;

  2,针对的是已经排好的数组。

代码演示:

//函数功能:从数组$arr中的位置$begin开始到位置$end之间找数据$s
function binary_search($arr,$s,$begin,$end)
{
    $mid = floor(($begin+$end)/2); // 定位中间的位置
    $mid_value = $arr[$mid];//取得中间项的值
    if($mid_value == $s)
    {
        return true;
    }else if($mid_value >$s)
    {
        if($begin > $mid-1)//如果开始位置都比结束位置大了,表示肯定找不到了
        {
            return false;
        }
        //中间项比要找的$s大,就去左边找吧:
        $re = binary_search($arr,$s,$begin,$mid-1);
    }else
    {
        if($mid+1 > $end)//如果开始位置比结束位置大了,表示肯定找不到了
        {
            return false;
        }
        //中间项比要找的$s小,就去右边找吧;
        $re = binary_search($arr,$s,$mid+1,$end);
    }
    return $re;
}

测试代码:

<?php
$a = array(1,3,11,18,19,22,25,33,34,38,44,55,56,58);
$search = 35;//要找的数
$len = count($a); // 数量,自然,最大下标是len-1

//使用binary_search()函数从$a中到len-1位置找$search
$v1 = binary_search($a,$search,0,$len-1);
echo "结果为:";
var_dump($v1);

测试结果:

·  结果为:bool(false)

有关二分法查找算法的效率(性能)问题的一点说明:

  1000个数据,约10次找出;

  100完个数据,约20次找出;

  10亿个数据,约30次找出;

  40亿个数据,约32次找出。

二分查找算法

标签:查找算法   pre   turn   sea   echo   下标   bool   array   function   

原文地址:https://www.cnblogs.com/xlju/p/8534770.html

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