<php 
function binarySearch($arr,$a){
    
    $low = 0;
    $high = count($arr)-1;
    $mid = ceil(($low+$high)/2);while($low<=$high){    if($a==$arr[$mid]){
     echo "查找的数的位置是第"."$mid";
    }    if($a>$arr[$mid]){        $high = count($arr)-1;
     $low = $mid+1;
    $mid = ceil(($low+$high)/2);
    }    if ($a<$arr[$mid]) {
    
     $low = 0;
     $high = $mid-1;
     $mid = ceil(($low+$high)/2);
    }
  }
}
$arr1 = array(5,7,9,10,12,16,19);
binarySearch($arr1,12);?>

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2013-03-30 17:42:33 编辑
      

  2.   

    按 php 实际可写作
    function binarySearch($arr,$a){
      $low = 0;
      $high = count($arr)-1;
      $mid = ceil(($low+$high)/2);
      $num = count($arr);
      while($low<=$high && $num--){
        if($a==$arr[$mid]){
          echo "查找的数的位置是第"."$mid";
          break;
        }
        list($low, $high) = $a > $arr[$mid] ? array($mid, $high) : array($low, $mid);
        $mid = ceil(($low+$high)/2);
      }
    }
      

  3.   

     
    我有点晕   如果是四个数呢,比如$r=array(1,2,3,4)  查找1 貌似不行        用floor来求$mid  这个  我  理解,用ceil貌似 有点问题、、、、   
      

  4.   

    Quote: 引用 2 楼 xuzuning 的回复:

    按 php 实际可写作
    PHP code?1234567891011121314function binarySearch($arr,$a){  $low = 0;  $high = count($arr)-1;  $mid = ceil(($low+$high)/2);  $num = count($arr);  while($low<=$high &amp;&amp……[/quote
    还是要  谢谢 版主大大、、、
      

  5.   

    function binarySearch($arr,$a){
      $low = 0;
      $high = count($arr)-1;
      $mid = ceil(($low+$high)/2);  $loop = count($arr);
      while($low<$high-1 && $loop--){
        if($a==$arr[$mid]){
          echo "查找的数的位置是第"."$mid";
          return $mid;
        }
        list($low, $high) = $a>$arr[$mid] ? array($mid, $high) : array($low, $mid);
        $mid = ceil(($low+$high)/2);
      }
      echo "查找的数的位置在第{$low}、{$high}之间";
    }
    $arr1 = array(5,7,9,10,12,16,19);
    binarySearch($arr1,11);