二分查找法

来源:互联网 发布:java mail 附件 io 编辑:程序博客网 时间:2024/06/06 00:15

二分查找法

简介

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
原创粉丝点击