我编写了以下程序来实现排序数组的二进制搜索:
int flag=0;
void binarysearch(int x, int a[], int m, int n)
{
int middle=(m+n)/2;
if(a[middle]==x)
{
printf("%d has been found at postion %d!\n", x, middle+1);
flag=1;
}
else
if(x > a[middle])
binarysearch(x, a, middle, n);
else
if(x < a[middle])
binarysearch(x, a, m, middle);
}
main()
{
int i, size, x;
int a[100];
printf("Enter the size of the list : ");
scanf("%d", &size);
printf("Enter the list items in ascending order : \n");
for (i=0; i<size; i++)
scanf("%d", &a[i]);
printf("Enter the element to be found : ");
scanf("%d", &x);
binarysearch(x, a, 0, size-1);
if(flag != 1)
printf("%d has not been found in the list!", x);
}
这个程序的问题是,binarysearch
如果尝试搜索不在列表中的项目,该函数会一遍又一遍地递归调用自己。因此,flag
变量变得完全没有意义。
程序是否有可能告诉用户他是否正在尝试执行这样的搜索(搜索不在数组中的东西)?
我假设这是不可能的,因为它是二进制搜索算法中的一个基本缺陷。请赐教。