zoukankan      html  css  js  c++  java
  • 二分查找算法

    二分查找算法的前提:

    1,针对的是索引数组;

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

    <?php
    //二分查找算法:
    //二分查找算法的前提:
    //1,针对的是索引数组;
    //2,针对的是已经排好序的数组;
    $a = array(1, 3,  11,  18,  19, 22,25, 33, 34, 38, 44, 55, 56,58, 60,61, 66, 70, 77, 88, 90, 91, 93, 95, 98);
    $search = 33;    //要找的数据
    $len = count($a);    //数量,自然,最大下标是len-1
    
    //函数功能:从数组$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;
        
    }
    
    //使用binary_search()函数从$a中的0到len-1位置找$search
    $v1 = binary_search($a, $search, 0, $len-1);
    echo "结果为:"; var_dump($v1);
    ?>

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

    1000个数据,约10次找出;

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

    10亿个数据,约30次找出

    40亿个数据,约32次找出

  • 相关阅读:
    c++ string 的注意事项
    vim 高级技巧
    常用工具
    网络安全测试工具
    RMQ ST算法
    高精度模板
    CodeForces
    CodeForces
    线段树初探
    树状数组初探
  • 原文地址:https://www.cnblogs.com/healy/p/6910176.html
Copyright © 2011-2022 走看看