折半查找法寻找一组数字中的某个数字的位置

利用折半查找法寻找一组数字中的某个数字的位置,输入数组中的数字后,却显示无此数

#include
int main()
{
int x,s;
int a[15]={0,5,13,19,21,27,56,54,75,80,88,92,105,121,160};
scanf("%d,%d",&x);
int low=0,high=14,middle;
middle=(low+high)/2;
for( ;x!=a[middle]; )
{
middle=(low+high)/2;
if(x>a[middle])
{
low=middle+1;
if(low>high)
{
break;
}
}
else
{
high=middle-1;
if(low>high)
{
break;
}
}
}
s=middle+1;
if(low>high)
printf("无此数\n");
else
printf("%d\n",s);
}

无报错,运行结果有问题

利用折半查找法找到一组数字中某个数字的位置

a[mid] > x的时候再更新右边的,等于的时候不用更新

#include<stdio.h>
int main()
{
    int x,s;
    int a[15]={0,5,13,19,21,27,56,54,75,80,88,92,105,121,160};
    scanf("%d,%d",&x);
    int low=0,high=14,middle;
    middle=(low+high)/2;
    for( ;x!=a[middle]; )
    {
        middle=(low+high)/2;
        if(x>a[middle])
        {
            low=middle+1;
            if(low>high)
            {
                break;
            }
            //printf("left:%d right:%d\n",low,high);
        }
        else if(x<a[middle])
        {
            high=middle-1;
            if(low>high)
            {
                break;
            }
            //printf("left:%d right:%d\n",low,high);
        }
    }
    printf("left:%d right:%d\n",low,high);
    s=middle+1;
    if(low>high)
        printf("无此数\n");
    else
        printf("%d\n",s);
}