【发布时间】:2012-08-02 18:51:30
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
int input(int *a)
{
int n,i;
printf("enter the no of elements:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("enter the element:");
scanf("%d",a++);
}
return n;
}
int key_input(int *a,int key)
{
int k;
printf("enter the key value which have to be searched in the array of no's provided:");
scanf("%d",&k);
return k;
}
void binary_search(int *a,int n,int key)
{
int low=0;
int high=n-1;
int mid;
while(low<=high)
{
mid=(high+low)/2;
if(key == a[mid])
{
printf("the key:%d is found at location:%d in the array",key,mid);
if(key==a[mid+1])
{
binary_search(a+mid+1,n-mid-1,key);
}
if(key==a[mid-1])
{
binary_search(a,n-mid-1,key);
}
if(key != a[mid-1] || key != a[mid+1])
break;
}
else if(key < a[mid])
high=mid-1;
else if(key>a[mid])
low=mid+1;
}
}
int main()
{
int arr[100];
int n=input(arr);
int key=key_input(arr,n);
binary_search(arr,n,key);
return 0;
}
这是我为二进制搜索编写的代码。我想找出密钥所在的所有数组位置。例如,如果我将输入 4、4、4、4 的键设为 4。输出应该包含数组(0-3)的所有位置,但我不知道代码有什么问题,它正在无限运行。有人请帮帮我。
【问题讨论】:
-
拜托,拜托,请学习如何合理地缩进你的代码。它是不可读的——或者,至少,不必要地难以阅读。
-
为什么把数组传给
key_input(),然后就不用了?数组与函数无关,不应传递。 -
您的二进制搜索如何向调用代码报告找到密钥的位置范围?我希望返回一个结构 (
struct range { int lo; int hi; }) 或两个指针参数,它们将由binary_search()中的代码设置。