二分查找法
<?php
/**
* @param array $arr 递增数字数组
* @param int $number 待查找的数字
* @return int 返回找到的键
*/
function binary_search($arr,$number){
// 非数组或数组为空,返回-1
if(!is_array($arr)||empty($arr)){
return -1;
}
// 初始化变量值
$len = count($arr);
$lower = 0;
$high = $len - 1;
// 最低点比最高点大就退出
while($lower<=$high){
//以中间点作为参照点
$middle = intval(($lower+$high)/2);
if($number < $arr[$middle]){
$high = $middle - 1; // 查找数比参照点小,则舍去右边
}else if ($number > $arr[$middle]){
$lower = $middle + 1; // 查找数比参照点大,则舍去左 边
}else{
return $middle;
}
}
//未找到,返回-1
return -1;
}
$arr = [1,3,5,7,9,11,16,26,27,29,34,35,39,65,97];
$find_key = binary_search($arr,27);
echo ‘$arr[‘.$find_key.‘]=‘.$arr[$find_key];在有序数组中如果用暴力算法查找,也就是阻隔遍历比较,那么时间复杂度是O(n);
但是用二分法查找,每次都会舍弃一般查找区间,所以复杂度是O(logn);
相关推荐
wuxiaosi0 2020-06-28
数据与算法之美 2020-06-28
只能做防骑 2020-06-01
Codeeror 2020-04-20
数据与算法之美 2020-04-15
lickylin 2020-02-29
chenfei0 2020-02-26
baike 2020-02-03
koushr 2020-11-12
数据与算法之美 2020-07-04
xhao 2020-06-29
路漫 2020-06-28
田有朋 2020-06-28
xhao 2020-06-28
natloc 2020-06-27
leoaran 2020-06-22
算法改变人生 2020-06-09