问题描述:
N个有序整数数列已经放在一维数组中,
利用二分查找法查找整数m在数组中的位置。
若找到,则输出其下标值;反之,则输出“Not be found!”
参考代码:
#include<stdio.h>
#define N 10
int main()
{
int i;
int mid;
int m;
int low = 0;
int high = N - 1;
int k = -1;
int a[N] = {-3,4,7,9,13,45,67,89,100,180};
printf("a 数组中的数据如下:\n");
for(i = 0; i < N; i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("Enter m:\n");
scanf("%d",&m);
while(low <= high)
{
mid = (low + high) / 2;
if(m < a[mid])
{
high = mid - 1;
}
else if(m > a[mid])
{
low = mid + 1;
}
else
{
k = mid;
break;
}
}
if(k >= 0)
{
printf("m = %d,index = %d\n",m,k);
}
else
{
printf("Not be found!\n");
}
return 0;
}
参考代码:
#include<stdio.h>
#define N 13
int main()
{
int f_dig;
int i;
int low;
int high;
int mid;
int k = 0;
int dig[N] = {-2,4,5,8,13,15,17,32,35,38,43,58,59};
printf("array_dig condition is:\n");
for(i = 0 ;i < N; i++)
{
printf("%d ",dig[i]);
}
printf("\nPlease input the digit f_dig that need to be found:\n");
scanf("%d",&f_dig);
low = 0;
high = N - 1;
while(low <= high)
{
mid = (low + high) / 2;
if(dig[mid] > f_dig)
{
high = mid - 1;
}
else if(dig[mid] < f_dig)
{
low = mid + 1;
}
else if(dig[mid] == f_dig)
{
printf("digit %d; index:%d\n",dig[mid],mid);
k = 1;
break;
}
}
if(k == 0)
{
printf("Not be found!\n");
}
return 0;
}