Ошибка в методе рекурсивного бинарного поиска? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь написать метод для выполнения двоичного поиска по массиву людей.Метод должен возвращать индекс, по которому человек найден, или -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 Ответ

0 голосов
/ 12 декабря 2018

Я вижу 2 проблемы:

  1. Во втором рекурсивном вызове вы передаете mid для левой границы и left для правой границы.Это не кажется правильным.
  2. Если вы ищете последнее Person, вычисление mid никогда не продвигается, а left никогда не равняется right, поэтому оно повторяется бесконечно.
...