递归二进制搜索方法中的错误?
Bug in recursive binary search method?
我正在尝试编写一种方法来对一组人员执行二进制搜索。该方法应该 return 找到该人的索引,如果不存在则为 -1。出于某种原因,该方法似乎 return -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 个问题:
- 在第二次递归调用中,您为左边界传递
mid
,为右边界传递 left
。好像不太对。
- 如果搜索最后一个
Person
,mid
的计算永远不会前进,而left
永远不会等于right
,所以会无限递归。
我正在尝试编写一种方法来对一组人员执行二进制搜索。该方法应该 return 找到该人的索引,如果不存在则为 -1。出于某种原因,该方法似乎 return -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 个问题:
- 在第二次递归调用中,您为左边界传递
mid
,为右边界传递left
。好像不太对。 - 如果搜索最后一个
Person
,mid
的计算永远不会前进,而left
永远不会等于right
,所以会无限递归。