从键盘中输入一个整数,在整型一维数组a[20]中用折半查找法找出该数是第几个元素的值。

题目是:从键盘中输入一个整数,在整型一维数组a[20]中用折半查找法找出该数是第几个元素的值。检查我的程序发现,b=1时候,i的值到1之后就不再减小,陷入了死循环。该怎么用最简便的方法输出正确的呢?

#include 
int main()
{int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int max=19,min=0,i,b;
scanf("%d",&b);
i=(max+min)/2;
while(i>=0&&i<=20)
  {if(b==a[i])
  {printf("这是第%d个元素",i+1);break; 
  }
  else if(b2;
  }
  else
  min=a[i];
  i=(max+min)/2;
  }
}

给你个参考示例:

#include <stdio.h>

int serach(int a[], int len, int n)
{

    int low=1, high= len;
    while(low<=high)
    {
        int mid=(low+high)/2;
        if(n==a[mid])
            return mid;
        else if(n < a[mid])
            high=mid-1;
        else 
            low=mid+1;
    }
    return -1;
}

int main(void)
{
    int a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, n; 
    printf("请输入您要查找的数: ");
    scanf("%d",&n);
    int len = sizeof(a) / sizeof(a[0]);
    int result = serach(a, len, n);
    if (result!=-1) 
        printf("%d是数组a中的第%d个元素",n, result + 1);
    else
        printf("Not Found");
    return 0;
}