大神有空给瞧一眼

afelll 2017-01-07 03:20:52

看看哪里还有问题吗?
#include <stdio.h>
main()
{
int a[15]={3,7,13,12,21,23,30,34,43,45,52,56,67,78,89};
int key;
int low = 0, high = 15-1, mid = 0;
mid = ( low + high ) / 2;
printf("input a number:");
scanf("%d,&key");
if (mid==key)
return mid;
while(mid!=key)
{
if( a[mid] < key )
low = mid + 1;
else if( a[mid] > key )
high = mid - 1;
mid = ( low + high ) / 2;
}
if( a[mid] == key ) return mid;
}
...全文
72 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小备不姓刘 2017-01-07
  • 打赏
  • 举报
回复
当(low+high)之和不为2的倍数时,(low+high)/2为浮点数,因为mid为int型,所以只保留整数部分,小数部分丢弃。例如low=0;high=14;//mid=7;low=1;high=14;//mid=7。你会发现都是7。这样就无法往7以上的数组移动。
dingdang111222 2017-01-07
  • 打赏
  • 举报
回复
仅供参考 #include"stdio.h" main() { int c[10]={1,2,3,4,5,6,7,8,9,10}; int high=9,low=0,mid,n; int flag; scanf("%d",&n); while (n) { mid=(high+low)/2; if(c[mid]==n) { flag=mid; break; } else if(c[mid]>n) high=mid-1; else low=mid+1; } printf("%d",flag); }
dingdang111222 2017-01-07
  • 打赏
  • 举报
回复
折半查找的数应该是原先就排好顺序的
幻夢之葉 2017-01-07
  • 打赏
  • 举报
回复
建议你去搜索下二分查找的算法和相关代码
幻夢之葉 2017-01-07
  • 打赏
  • 举报
回复
语法,算法都有问题 还有你应该写个函数来查找返回索引,不要在main函数返回
wang0635 2017-01-07
  • 打赏
  • 举报
回复
scanf("%d,&key"); ==> scanf("%d", &key);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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