以下C程序工作正常但不适用于位于零位置或小于零位置值的值。这个程序基本上取一个值并检查给定值是否在数组中。它首先将给定值与数组的中间值进行比较,并确定它是否匹配它,或者是在上半部分还是下半部分然后继续进入选定的一半,并以类似的方式进行,直到它获得值或范围出现为零。但是在这里它没有显示任何结果只是屏幕上闪烁的光标(如果零位置的值或小于该位置的值)。
#include<stdio.h>
main()
{
int n, x,b;
int s[]= {2,3,7,9,33,58};
n=6;
printf("Enter the number which we want to find in the array ");
scanf("%d",&x);
b=binsearch(n, s, x);
printf("The position is: %d",b);
}
int binsearch(int n, int v[], int x)
{
int low, high, mid;
low=0;
high= n-1;
while(low<=high)
{
mid=(low+high)/2;
if (x<v[mid])
high=mid+1;
else if (x>v[mid])
low=mid+1;
else
return mid;
}
return -1;
}
如果我们进行以下更改,那么程序会给出相同的问题,但是对于最后一个位置或更大的值。
#include<stdio.h>
main()
{
int n, x,b;
int s[]= {2,3,7,9,33,58};
n=6;
printf("Enter the number which we want to find in the array ");
scanf("%d",&x);
b=binsearch(n, s, x);
printf("The position is: %d",b);
}
int binsearch(int n, int v[], int x)
{
int low, high, mid;
low=0;
high= n-1;
while(low<high)
{
mid=(low+high)/2;
if (x<v[mid])
high=mid;
else if (x>v[mid])
low=mid;
else
return mid;
}
return -1;
}
答案 0 :(得分:0)
最好修改二进制搜索功能,将low
和high
作为参数而不是n
。
int binsearch(int v[], int low, int high, int x)
{
int mid=(low+high)/2;
if(low<=high)
{
if (x<v[mid])
high=mid-1;
else if (x>v[mid])
low=mid+1;
else
return mid;
return binsearch(v, low, high, x);
}
return -1;
}
如果x
等于v[mid]
,则会返回mid
。
如果x
低于中间值,则high
成为mid-1
,如果x
高于中间值,则low
成为mid+1
{ {1}}因此,正在考虑阵列当前部分的一半。
binsearch()
是一个递归函数,在low>high
之前一直被调用。
如果找到匹配项,函数将返回位置,否则返回-1
。