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



我正在尝试编写一个方法来对人员数组执行二进制搜索。该方法应该返回人员所在的索引,如果不存在,则返回-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};

我可以看到两个问题:

  1. 在第二个递归调用中,为左界传递mid,为右界传递left。这似乎不对
  2. 如果搜索最后一个Person,则mid的计算永远不会前进,而left永远不会等于right,因此它会无限递归

相关内容

最新更新