69,336
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main (void)
{
int a[15]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
int min, max, mid, n;//max为数列长度,a[2]作为第一个数组元素
printf("请输入要查找的数:\n");
scanf("%d", &n);
min = 0;
max = sizeof(a)/sizeof(a[0]);
while (min <= max) {
mid = (min + max) / 2;
if(n > a[mid])
min = mid + 1;
else if(n < a[mid])
max = mid - 1;
else {
printf("输入的数在数列的%d位\n", mid);
break;
}
}
if (min > max)
printf("Not in list!\n");
return 0;
}
上一个有点问题;用这个吧~#include <stdio.h>
int main (void)
{
int a[15]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
int min, max, mid, n;
printf("请输入要查找的数:\n");
scanf("%d", &n);
min = 0;
max = sizeof(a)/sizeof(a[0]);
while (min <= max) {
mid = (min + max) / 2;
if(n > a[mid])
min = mid + 1;
else if(n < a[mid])
max = mid - 1;
else
printf("输入的数在数列的%d位", mid);
printf("mid = %d, min = %d, max = %d\n", mid, min, max);
}
if (min > max)
printf("Not in list!\n");
return 0;
}
二分查找法,max不是30,而是sizeof(a)/sizeof(a[0]);