二分查找法用for循环的实现,结果只能输出3,换个数就找不到求解答。

#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