有人能指出这段代码有什么问题吗?我不得不在递归中推入二进制搜索,并且赋值使用
指定了签名public static <AnyType extends Comparable<AnyType>>
int binarySearch(AnyType[] a, AnyType x);
这是我的代码......
public static <AnyType extends Comparable<AnyType>>
int binarySearch(AnyType[] a, AnyType x){
int low = 0;
int high = a.length - 1;
while(low <= high){
int mid = (low + high) / 2;
if(a[mid].compareTo(x) < 0) {
AnyType[] b = Arrays.copyOfRange(a, mid + 1, a.length);
return binarySearch(b, x);
} else if(a[mid].compareTo(x) > 0) {
high = mid - 1;
AnyType[] b = Arrays.copyOfRange(a, 0, mid - 1);
return binarySearch(b, x);
} else {
return mid;
}
}
return -1;
}
答案 0 :(得分:0)
我可能会建议一个不复制原始数组的辅助方法;但取而代之的是搜索的索引。
像binarySubSearch(a,x,start,end)。我会给你更多,但我认为这是作业。
答案 1 :(得分:0)
将中点添加到返回的索引中需要输入几个错误,而第二个范围副本不正确。
if(a[mid].compareTo(x) < 0) {
AnyType[] b = Arrays.copyOfRange(a, mid + 1, a.length);
int index = binarySearch(b, x);
if(index != -1){
index = mid +1 + index;
}
return index;
} else if(a[mid].compareTo(x) > 0) {
AnyType[] b = Arrays.copyOfRange(a, 0, mid); <=== not mid -1
return binarySearch(b, x);
} else {
return mid;
}