function fun_seach($arr,$data){
 
  $len=count($arr)/2;
  $low=0;
 
  for($i=0;$i<$len;$i++){
  if($data < $len){
      
      $len--;
  echo "<script>alert('$len');</script>";
  }else if($data > $len){
  $len=$len+1;
      echo "<script>alert('$len');</script>";
  }else{
  echo "<script>alert('bb');</script>";
     return $i;
 
  }
   
 
  }
 
 }
 echo "<br/>";
 echo "二分查找";
 $flag=fun_seach(array(0,1,2,3,4,5,6,7,8,9),2);
 echo $flag;为什么大于5就正常,小于3的数就算不出了?

解决方案 »

  1.   

    # function bin_sch($arr, $low, $high, $k) {  
    #     if($low<=$high) {  
    #         $mid = intval(($low+$high)/2);  
    #         if($arr[$mid] == $k) {  
    #             return $mid;  
    #         } elseif($k<$arr[$mid]) {  
    #             return bin_sch($arr,$low,$mid-1,$k);  
    #         } elseif($k>$arr[$mid]) {  
    #             return bin_sch($arr,$mid+1,$high,$k);  
    #         }  
    #     }  
    #     return -1;  
    # }  参考这个函数
      

  2.   

    我指的是$i呀,我是想知道倒是算了几次吧,
    类似二分法 小于$data小于3的话,就没有输出了!
      

  3.   

    LZ,看不出来您用的是二分法啊,比较条件比较怪异,
    data < $len   是什么意思呢?
    二分法不是用这个比较啊,LZ说清楚点啊!~
      

  4.   

    看一下这个<?php   
    //search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值   
    function search($array, $k, $low=0, $high=0)       
    {    
        if(count($array)!=0 and $high == 0)                 //判断是否为第一次调用   
        {   
            $high = count($array);   
        }   
        if($low <= $high)                                //如果还存在剩余的数组元素   
        {    
            $mid = intval(($low+$high)/2);                  //取$low和$high的中间值   
            if ($array[$mid] == $k)                         //如果找到则返回   
            {    
                return $mid;    
            }   
            elseif ($k < $array[$mid])                       //如果没有找到,则继续查找   
            {    
                return search($array, $k, $low, $mid-1);    
            }   
            else  
            {    
                return search($array, $k, $mid+1, $high);    
            }    
        }    
        return -1;    
    }    
    $array = array(4,5,7,8,9,10);                           //测试search函数   
    echo search($array, 8);                             //调用search函数并输出查找结果  
    http://blog.csdn.net/zhuzhao/archive/2009/03/09/3969044.aspx
      

  5.   

    我不说了嘛,类似二分法呀,我那个条件比较,应该也没错吧,当$data==$len时一定执else了吧!
      

  6.   


    因为for中的$len改变了, 当$data==$len的时候, for里的条件已经不满足了, 所以不再执行for, 没输出
      

  7.   

    LZ,您看清楚啊,$data==$len 的时候,会有$i == $data的时候啊,
    进入for的条件是$i < $len;
    但是对$len的操作是在for里面执行的,$data==2的情况下,最后是不会执行else的;
     因为 $i == $date == $len;
    同样大于5的时候,您也可以推理一下~