我试图使用二进制搜索递归在数组中找到一个元素。我无法弄清楚程序中的逻辑有什么问题,因为我输出的输出不正确。如果我搜索5,我得到的输出是4.同样,我也没有得到其他情况的正确结果。这个程序可能有什么问题?
public class OrdArray {
private long[] a;
private int nELems;
public OrdArray(int max){
a=new long[max];
int nElems=0;
}
public int size(){
return nELems;
}
public void insert(int value){
int j;
for(j=0;j<nELems;j++){
if(a[j]>value){
break;
}
}
for(int k=nELems;k>j;k--){
a[k]=a[k-1];
}
a[j]=value;
nELems++;
}
public void display(){
for(int i=0;i<nELems;i++)
System.out.print(a[i]+" ");
System.out.println(" ");
}
public int Recursionfind(int low,int high,int key){
if(low>=high){
return nELems;
}
int mid=(low+high)/2;
if(a[mid]== key){
return mid;
}
if(a[mid]>key){
return Recursionfind(low,mid-1,key);
}
else{
return Recursionfind(mid+1,high,key);
}
}
}
class OrderedApp{
public static void main(String[] args) {
int maxsize=100;
OrdArray arr;
arr=new OrdArray(maxsize);
System.out.println("Insert array:");
arr.insert(3);
arr.insert(5);
arr.insert(1);
arr.insert(7);
arr.insert(6);
arr.insert(4);
arr.insert(8);
arr.insert(2);
arr.insert(9);
arr.display();
int n=arr.size();
System.out.println(n);
int key=5;
System.out.println("Key is :" + arr.Recursionfind(0,n-1,key));
}
}
答案 0 :(得分:0)
错误在于:
if(a[mid]== key){
return mid;
}
您将搜索到的值与位置mid
处的数组值相匹配。如果找到它,则必须返回找到的值而非键。
if(a[mid]== key){
return a[mid];
}
您还必须将a
从long[]
更改为int[]
。