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的数就算不出了?
# 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;
# } 参考这个函数
类似二分法 小于$data小于3的话,就没有输出了!
data < $len 是什么意思呢?
二分法不是用这个比较啊,LZ说清楚点啊!~
//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
因为for中的$len改变了, 当$data==$len的时候, for里的条件已经不满足了, 所以不再执行for, 没输出
进入for的条件是$i < $len;
但是对$len的操作是在for里面执行的,$data==2的情况下,最后是不会执行else的;
因为 $i == $date == $len;
同样大于5的时候,您也可以推理一下~