二分查找法
<?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
jimeshui 2020-11-13
数据与算法之美 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