#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");
}
}
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
for(i=0;i!=arr[mid];i++) 这个循环条件写错了,是left<=right
int left=arr[0]; 这里left = 0
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5};
int len=sizeof(arr)/sizeof(arr[0]);
int left=0;
int right=len-1;
int number=2;
int mid;
int i = -1;
while(left <= right)
{
mid=(left+right)/2;
if(number>arr[mid])
{
left=mid+1;
}
else if(number<arr[mid])
{
right=mid-1;
}
if(number==arr[mid])
{
i = mid;
break;
}
}
if(i != -1)
printf("%d",i);
else
printf("找不到");
}
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5};
int len=sizeof(arr)/sizeof(arr[0]);
int left=0;
int right=len-1;
int number=2;
int mid;
int i = -1;
while(left <= right)
{
mid=(left+right)/2;
if(number>arr[mid])
{
left=mid+1;
}
else if(number<arr[mid])
{
right=mid-1;
}
if(number==arr[mid])
{
i = mid;
break;
}
}
if(i != -1)
printf("%d",i);
else
printf("找不到");
}
采纳手误,问题检查并无实际解决。。QAQ