PHP二分查找

来源:互联网 发布:网络交易管理办法 pdf 编辑:程序博客网 时间:2024/05/20 20:56

二分查找需要数组有序,效率为O(logn)

<?php    #二分查找    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);    $inx = binarySearch($arr, 1);    var_dump($inx);?>

输出

float(0)

递归方法

function binarySearch(Array $arr, $target) {      $mid = ceil(count($arr) / 2);   //取中间位的下标      if ($arr[$mid] < $target) {         $arr = array_slice($arr,$mid);        return binarySearch($arr, $target);      } else if ($arr[$mid] > $target){          $arr = array_slice($arr,0,$mid);        return binarySearch($arr, $target);      } else if{          return $mid;      } else {        return false;    } }  
0 0