php二分查找的算法

Posted on 2015-01-03 22:45  anyongchao  阅读(251)  评论(0)    收藏  举报

前提:首先二分查找需要数组是有序,效率为O(logn)

    #二分查找
    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;
    }

      $arr = array(1, 3, 5, 7, 9, 11,18,56,78,99,191,280,333);
      $inx = binarySearch($arr, 78);

    var_dump($inx);