#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;
}
来个简洁程序看看
我也写一个
下次提问的时候,一定要说清楚自己测试后有哪些问题。
#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;
}
折半的那个逻辑有问题,导致运行结果不正确