帮俺看一下我的折半查找发过程哪里错了

img

#include <stdio.h>

int main()
{
int a[15],i,j,n;
int high,mid,x,low=0;
x=sizeof(a)/sizeof(a[0]);
high=x-1;
for(i=0;i<=14;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
while(low<high)
{
mid=(high+low)/2;
if(a[mid]==n)
{
i=mid;
break;
}
else if(a[mid]>n)
high=mid-1;
else
low=mid+1;
}
j=i+1;
if(n<a[0]&&n>a[14])
printf("cannot find %d",n);
else
printf("Has found %d, its position is %d",n,j);
return 0;
}

你是怎么输入的? 要用空格隔开


#include<stdio.h>
int main()
{
    int array[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
    int left = 0;
    int right = sizeof(array) / sizeof(array[0]);
    int key = 0;

    printf("请输入要查找的数字: ");
    scanf("%d", &key);

    // 二分查找
    while (left < right)
    {
        // 找到中间位置
        int mid = left + ((right - left) >> 1);
        if (key == array[mid])
        {
            printf("%d\n", mid);
            break;
        }
        else if (key < array[mid])
        {
            right = mid;
        }
        else
        {
            left = mid + 1;
        }
    }

    if (left >= right)
        printf("无此数\n");
    return 0;
}

#include <stdio.h>

int main()
{
    int a[15], i, j, n;
    int high, mid, x, low = 0;
    x = sizeof(a) / sizeof(a[0]);
    high = x - 1;
    for (i = 0; i <= 14; i++)
        scanf_s("%d", &a[i]);
    scanf_s("%d", &n);
    while (low < high)
    {
        mid = (high + low) / 2;
        if (a[mid] == n)
        {
            i = mid;
            break;
        }
        else if (a[mid] > n)
            high = mid - 1;
        else
            low = mid + 1;
    }
    j = i + 1;
    if (n<a[0] && n>a[14])
        printf("cannot find %d", n);
    else
        printf("Has found %d, its position is %d", n, j);
    return 0;
}


来个简洁程序看看

img


img

我也写一个
下次提问的时候,一定要说清楚自己测试后有哪些问题。

#include <stdio.h>
int main() 
{
    int a[15],i,j,n;
    int high,mid,x,low=0;
    x=sizeof(a)/sizeof(a[0]);
    high=x-1;
    printf("请按从小到大的顺序输入15个整数:");
    for (i=0;i<=14;i++)
        scanf("%d",&a[i]);
    printf("\n请输入搜索的关键字:");
    scanf("%d",&n);
    i=-1;
    while(low<=high) 
    {
        mid=low+ ((high- low) / 2);
        if (a[mid]> n) 
        {
            high= mid- 1;
        } else if (a[mid]< n) 
        {
            low = mid+ 1;
        } else 
        {
            i=mid;
            break;
        }
    }
    if(i >= 0) 
    {
        printf("\nHas found %d, its position is %d",n,i);
    } else 
    {
        printf("\ncannot find %d",n);
    }
    return 0;
}

#include <stdio.h>

int main()
{
int a[15], i, j, n;
int high, mid, x, low = 0;
x = sizeof(a) / sizeof(a[0]);
high = x - 1;
for (i = 0; i <= 14; i++)
scanf_s("%d", &a[i]);
scanf_s("%d", &n);
while (low <= high)
{
mid = low + (high - low) / 2;
if (a[mid] == n)
{
i = mid;
break;
}
else if (a[mid] > n)
high = mid - 1;
else
low = mid + 1;
}
if (n<a[0] && n>a[14])
printf("没有找到 %d", n);
else
printf("没有找到 %d, 位置是 %d", n, mid+1);
return 0;
}

折半的那个逻辑有问题,导致运行结果不正确