二分法查找,需要一个是递增的数组。
原理:找出数组的中间位置,从中间位置把数组一分为二,先拿中间的值和要查找的值进行对比。如果一致,直接返回中间位置;如果 中间的值 比 要查找的值 大,说明要查找的值在左边,再去左边进行查找,重复上面步骤,直到匹配到或查完数组;如果 中间的值 比 要查找的值 小,说明在右边,去右边查找。
function search($array, $value, $low = 0, $high = 0){ // 初始化赋初值 if($high == 0 && count($array) > 0){ $high = count($array); } if($low <= $high){ // 左边坐标 不能大于 右边坐标 // 找到中间坐标 $mid = floor(($low + $high) / 2); if($array[$mid] == $value){ // 中间坐标的值刚好等于要查找的值,直接返回坐标 return $mid; }else if($array[$mid] > $value){ // 中间坐标的值 比 要查找的值 大,进入左边继续查找 return search($array, $value, $low, $mid-1); }else{ // 反之,中间坐标的值 比 要查找的值 小,进入右边继续查找 return search($array, $value, $mid+1, $high); } } echo '没有找到该值'; } $array = array(2, 3, 6, 8, 13, 16, 23, 27, 39, 40); echo search($array, 6);
一片空白 5.8万
父爱如山,不善表达。回想十多年前,总记得父亲有个宽厚的肩膀,小小的自己跨坐在上面,越过人山人海去看更广阔的天空,那个时候期望自己有一双翅膀,能够像鸟儿一样飞得高,看得远。虽然父亲有时会和自己开玩笑,但在做错事的时候会受到严厉的训斥。父亲有双粗糙的大手掌。