递归二进制搜索方法中的错误?

塔拉利98

我正在尝试编写一种对人员数组执行二进制搜索的方法。该方法应返回找到该人的索引,如果不存在则返回-1。由于某种原因,即使该人在数组中,该方法似乎也返回-1。请帮助我是一个初学者。

public static int binarySearchRecursive(Person[] a, Person p) {
    int right = a.length -1;
    int left = 0;
    return binarySearchRecursive(a, p, left, right);
}
private static int binarySearchRecursive(Person[] a, Person p, int left, int right) {
    int mid = (left + right) / 2; 

    if (a[mid].compareTo(p) == 0) 
        return mid;

    if (left == right) 
        return -1;

    else {
        if (a[mid].compareTo(p) > 0) {
            return binarySearchRecursive(a, p, left, mid);
        }
        else {
            return binarySearchRecursive(a, p, mid, left);
        }
    }
}

  public static void main(String[] args) {
    Person s = new Person("shlomo",13);
    Person m = new Person("menachem",15);
    Person y = new Person("yehuda",18);
    Person a = new Person("atara",20);



    Person [] array = {s, m, y, a};
用户名

我可以看到2个问题:

  1. 在第二个递归调用中,您将传递mid左边界和left右边界。那似乎不对。
  2. 如果您搜索last Person则no的计算mid永远不会进行,并且left永远不会等于right,因此它会无限递归。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章