【天天数据结构和算法】PHP实现二分查找的两种方法
巩固一下大学时期学习的二分查找法,用PHP实现:
1.递归方法实现:
/** * @Description:二分查找法 * @User:jysdhr * @param $target 查找目标 * @param $arr 待查找数组 * @param $l 数组起始索引 * @param $r 数组结束索引 * @return int target所在位置 -1则不存在 */ function BinarySearch($target,$arr,$l,$r){ if ($l>$r){ return -1; } $mid = $l+($r-$l)/2; if ($target == $arr[$mid]) return $mid; if ($target<$arr[$mid]) return BinarySearch($target,$arr,$l,$mid-1); else return BinarySearch($target,$arr,$mid+1,$r); } $arr = [1,3,5,6,7,8,10]; var_dump(BinarySearch(9,$arr,0,6)) ;
2.循环方法实现:
<?php /** * @Description:二分查找法循环处理 * @User:jysdhr * @param $target 查找目标 * @param $arr 待查找数组 * @return int 返回索引 -1为不存在 */ function BinarySearch($target,$arr) { //基于在数组arr [l,r]区间内查找target $l = 0; $r = count($arr) - 1; while ($l <= $r) { $mid = $l + ($r - $l)/2; if ($target == $arr[$mid]) return $mid; if ($target < $arr[$mid]) $r = $mid - 1; else $l = $mid + 1; } return -1; }
总结:因为PHP有自动类型转换,而不用考虑整形溢出的这种异常.哈哈,不得不说,php处理二分查找确实很简单.也很好理解(强类型语言注意int型溢出)