使用Java的数组的二进制搜索泛型

时间:2016-01-30 03:42:49

标签: java generics

有人能指出这段代码有什么问题吗?我不得不在递归中推入二进制搜索,并且赋值使用

指定了签名
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;
}

2 个答案:

答案 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;
  }