二分查找法
来源:互联网 发布: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
- 查找----二分查找法
- 二分查找法,查找string
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java:二分查找法
- C++ 二分查找法
- 二分查找法
- 【二分查找法】
- php二分查找法
- 二分查找法
- 二分查找法
- 51nod:1212 无向图最小生成树
- 控件:TextView
- 基础练习 01字串
- Linux下gdb调试多线程
- 正则表达式(二)
- 二分查找法
- C#控件属性设置
- [小雅轩观点]003谈声明与定义
- AngularJS—AngularJs项目实践总结
- 使用Smart HTTP和Gitweb搭建简易个人git服务器
- IDE Android studio Eclipse
- 欢迎使用CSDN-markdown编辑器
- 自己实现一下ArrayList
- 数据库常用数据类型