二分查找

来源:互联网 发布:软件测试 patton 招聘 编辑:程序博客网 时间:2024/05/24 01:22
//    非递归//    $target是要查找的目标 $arr是已经排序好的数组    function binary(&$arr,$low,$top,$target){        while($low <= $top){//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整            $mid = floor(($low+$top)/2);            echo $mid."<br>";            if($arr[$mid]==$target){                return $arr[$mid];            }elseif($arr[$mid]<$target){                $low = $mid+1;                            }else{                $top = $mid-1;            }        }        return -1;    }//第二种非递归的查找#二分查找 #这也就是说,二分查找的时候必须是排好序的 function binarySearch(Array $arr, $target) {     $low = 0;     $high = count($arr) - 1;     while($low <= $high) {         $mid = floor(($low + $high) / 2);         #找到元素        if($arr[$mid] == $target) return $mid;        #中元素比目标大,查找左部        if($arr[$mid] > $target) $high = $mid - 1;        #重元素比目标小,查找右部        if($arr[$mid] < $target) $low = $mid + 1;    }    #查找失败    return false;}
//    递归    function binaryRecursive(&$arr,$low,$top,$target){        if($low<=$top){            $mid = floor(($low+$top)/2);            if($mid==$target){                return $arr[$mid];            }elseif($arr[$mid]<$target){                return binaryRecursive($arr,$mid+1,$top,$target);            }else{                return binaryRecursive($arr,$low,$top-1,$target);            }        }else{            return -1;        }    }
0 0