二分查找法
Posted meichao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找法相关的知识,希望对你有一定的参考价值。
工作原理
一、流程图
二、原理
第一步:我们选取目标数和基准值
$arr = [1,2,3,4,5,6,7,8,9]; $mind = ceil(($start+$end)/2);
第二步:判断当前要查找的值是否是基准值,是就直接返回下标;不是在判断是不是基准值的左边或右边,如果不存在,数组继续选取,直到找到为止返回下标。
图解
注意:
1、二分查找法一定是排好序的,才能使用二分查找;
源代码
一、递归的方式实现
function binSearch($arr, $key, $start, $end) { $mid = ceil(($start+$end) / 2); if($arr[$mid] < $key){ binSearch($arr, $key, $mid+1, $end); }else if($arr[$mid] > $key){ binSearch($arr, $key, $start, $mid-1); }else{ return $mid; } } $arr = [1,2,3,4,5,6,7,8,9]; $len = count($arr) - 1; $data = binSearch($arr, 5, 0, $len); var_dump($data);
二、迭代的方式实现
function binSearch($arr, $key){ $start=0; $end=count($arr)-1; while($start <= $end){ $mid = ceil(($start+$end)/2); if($arr[$mid] < $key){ $start = $mid+1; }else if($arr[$mid] > $key){ $end = $mid-1; }else{ return $mid; } } } $arr = [1,2,3,4,5,6,7,8,9]; $len = count($arr) - 1; $data = binSearch($arr, 5, 0, $len); var_dump($data);
性能分析
查找算法 | 时间复杂度 | 空间复杂度 | 稳定性 | ||
平均情况 | 最坏情况 | 最好情况 | |||
二分查找法 | O(log2n) | O(n) | O(log2n) | O(1)-O(log2N ) | 稳定 |
以上是关于二分查找法的主要内容,如果未能解决你的问题,请参考以下文章