#include<stdio.h>
int main(void)
{
int arr[]={1,2,3,4,5};
int len=sizeof(arr)/sizeof(arr[0]);
int left=arr[0];
int right=len-1;
int number=2;
int mid=(left+right)/2;
int i;
for(i=0;i!=arr[mid];i++)
{
if(number>arr[mid])
{
left=mid+1;
}
else if(number<arr[mid])
{
right=mid-1;
}
}
if(number==arr[mid])
{
printf("找到了 %d\n",arr[mid]);
}
else
{
printf("找不到\n");
}
}
二分查找法用for循环的实现,结果只能输出3,换个数就找不到求解答。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注 mid=(left+right)/2 这句要放在for循环里面,修改一下就可以了
#include<stdio.h> int main(void) { int arr[]={1,2,3,4,5}; int len=sizeof(arr)/sizeof(arr[0]); int left=arr[0]; int right=len-1; int number=2; int mid=0; int i; for(i=0;i!=arr[mid];i++) { mid=(left+right)/2; if(number>arr[mid]) { left=mid+1; } else if(number<arr[mid]) { right=mid-1; } } if(number==arr[mid]) { printf("找到了 %d\n",arr[mid]); } else { printf("找不到\n"); } }
运行结果:
找到了 2
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
- ¥20 关于URL获取的参数,无法执行二选一查询
- ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
- ¥15 marlin编译错误,如何解决?
- ¥15 有偿四位数,节约算法和扫描算法
- ¥15 VUE项目怎么运行,系统打不开
- ¥50 pointpillars等目标检测算法怎么融合注意力机制
- ¥20 Vs code Mac系统 PHP Debug调试环境配置
- ¥60 大一项目课,微信小程序
- ¥15 求视频摘要youtube和ovp数据集