二分法奇怪的问题?

llj480028 2010-02-28 08:40:58

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的数就算不出了?
...全文
201 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostxyz0 2010-03-01
  • 打赏
  • 举报
回复
LZ,你的算法是失败的
freespacezjx 2010-03-01
  • 打赏
  • 举报
回复
LZ,看不出来您用的是二分法啊,比较条件比较怪异,
data < $len 是什么意思呢?
二分法不是用这个比较啊,LZ说清楚点啊!~
llj480028 2010-03-01
  • 打赏
  • 举报
回复
我指的是$i呀,我是想知道倒是算了几次吧,
类似二分法 小于$data小于3的话,就没有输出了!
heyli 2010-03-01
  • 打赏
  • 举报
回复
大于5就正常,小于3的数就算不出 什么意思
骄傲青蛙 2010-03-01
  • 打赏
  • 举报
回复
为什么大于5就正常,小于3的数就算不出了?

-------------------------------

指那个参数?
whuiyi 2010-03-01
  • 打赏
  • 举报
回复
路过!!!!!!!!!!!!!!
FKBlog 2010-03-01
  • 打赏
  • 举报
回复
# 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;
# }

参考这个函数
freespacezjx 2010-03-01
  • 打赏
  • 举报
回复
LZ,您看清楚啊,$data==$len 的时候,会有$i == $data的时候啊,
进入for的条件是$i < $len;
但是对$len的操作是在for里面执行的,$data==2的情况下,最后是不会执行else的;
因为 $i == $date == $len;
同样大于5的时候,您也可以推理一下~
骄傲青蛙 2010-03-01
  • 打赏
  • 举报
回复
引用 9 楼 llj480028 的回复:
我不说了嘛,类似二分法呀,我那个条件比较,应该也没错吧,当$data==$len时一定执else了吧!


因为for中的$len改变了, 当$data==$len的时候, for里的条件已经不满足了, 所以不再执行for, 没输出
llj480028 2010-03-01
  • 打赏
  • 举报
回复
我不说了嘛,类似二分法呀,我那个条件比较,应该也没错吧,当$data==$len时一定执else了吧!
heyli 2010-03-01
  • 打赏
  • 举报
回复
看一下这个

<?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
jusin909 2010-02-28
  • 打赏
  • 举报
回复
定一下,拿点分...
人们对IT充满了欣喜,特别是随着IT渗透到我们生活的每个领域。 互联网等IT奇迹,银行,购物,商品送货到家,出租车预订服务等在线服务,通过社交媒体的便捷通信,GPRS,基于家庭的会议使我们的生活变得更加轻松,非常满意。 另一方面,全世界都在抱怨VUCA(脆弱性,不确定性,混乱和歧义)世界以及IT造成的破坏。 画面的一侧看起来非常红润,而另一侧则显得阴沉。“为什么要这样二分法?” 您可能会感到奇怪。尽管您享受IT提供的在线服务的便利,但本文试图将您的注意力转向IT的一个鲜为人知和广为宣传的方面–公司在为这些公司实际提供或交付这些服务时所付出的努力和流程。你。 有些人在幕后做出了努力,以构建解决方案,实施解决方案并确保顺利交付适合您的满意度的服务。 您会惊讶于您在工作场所中的IT经验与您的个人生活经验完全相反。 在办公室中开发和实施ERP解决方案以将这些服务提供给您的场景真是令人难以置信,但事实并非如此,事实上,这是令人沮丧和痛苦的。 ERP实施中有超过70%的失败。 在这些实施过程中,由于过度劳累和压力而导致动荡。失败会导致责备游戏,指责和政治。 因此,为您提供服务的只有30%成功,而70%却看不到曙光。“为什么担心,当30%成功给您私人生活带来如此满足和舒适时?” 你可以这样说。 想象一下,如果这70%成功了,您的生活会好得多。 想象一下由于这些失败而使您失去的生活。 想象一下它给幕后工作人员带来的痛苦和压力,您可能是其中的一员。 想一想花了很多钱和精力的事情。 毕竟,这笔钱归我们所有人所有。二分法涉及两种不同的情况-私人生活中的IT情况比较乐观,而Corporate中的IT项目实施情况并不那么乐观。 不幸的是,工业界和学术界的大部分甚至都没有意识到这种悲惨的情况。 他们倾向于专注于IT行业的制造方,而忽略了IT行业的用户/消费者方。 他们需要关注IT的这一最脆弱的方面-ERP实施阶段。 问题不仅仅在于技术,还在于人员和思维方式。 由于问题是行为上的,因此解决方案也必须是行为上的。

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧