//二分查找。定义的数组必须为有序数组,加入要找7,先得到数组最中间的那个数,$arr中间数为9,用9跟7比,如果比7大,从左边找,比7小从右边找 $arr=[1,3,5,7,9,11,13,15,19]; /** * 二分查找 递归 * @param $arr * @param $search为查找的值 * @return string * */ function search($arr,$search){ $middle=ceil(count($arr)/2-1); if(count($arr)<1){ return ('没有找到'); } //直接找到 if($arr[$middle]==$search){ return $arr[$middle]; } //查找的值 比中间值小 从左边部分继续找 if($arr[$middle]>$search){ $arr=array_slice($arr,0,$middle); // var_dump($arr);exit; return search($arr,$search); } //查找的值 比中间值大 从右边部分继续找 if($arr[$middle]<$search){ $arr=array_slice($arr,$middle+1); return search($arr,$search); } return '没找到'; } #二分查找 非递归 function search2($arr,$search){ $low=0; $high=count($arr)-1; while($low<=$high){ $mid=ceil(($low+$high)/2); // var_dump($mid);exit; if($arr[$mid]==$search){ return $search; } if($arr[$mid]>$search){ $high=$mid-1; } if($arr[$mid]<$search){ $low=$mid+1; } }
二分查找级思路
猜你喜欢
转载自blog.csdn.net/weixin_42262935/article/details/80915811
今日推荐
周排行