根据已知有序数组,实现二分查找算法(折半查找),输入任意数字,返回该数字在数组中的下标位置。
要求:编写函数实现上述要求,必须使用两种方法实现,一种递归,一种非递归
/*** 二分查找 非递归* &#64;param Array $arr 待查找的数组* &#64;param Int $key 要查找的关键字* &#64;return Int*/function bin_search(Array $arr,$key){$high &#61; count($arr);if($high <&#61; 0)return -1;$low &#61; 0;while($low <$high){//当前查找区间arr[low..high]非空$mid&#61;intval(($low &#43; $high) / 2);if($arr[$mid] &#61;&#61; $key)return $mid; //查找成功返回if($arr[$mid] > $key)$high &#61; $mid - 1; //继续在arr[low..mid-1]中查找else$low &#61; $mid &#43; 1; //继续在arr[mid&#43;1..high]中查找}return -1; //当low>high时表示查找区间为空&#xff0c;查找失败}
-------------------------------
//递归 2分function bin_search2(array $arr,$key,$begin,$end){if($end <&#61; 0)return -1;$mid&#61;intval(($begin &#43; $end) / 2);if($arr[$mid] &#61;&#61; $key)return $mid; //查找成功返回if($arr[$mid] > $key)return $this->bin_search2($arr, $key, $begin, $mid - 1); //继续在arr[low..mid-1]中查找elsereturn $this->bin_search2($arr, $key, $mid &#43; 1, $end); //继续在arr[mid&#43;1..high]中查找}