Двоичный поиск (строковое значение): попытка поиска имени пользователя - PullRequest
0 голосов
/ 09 мая 2020

Итак, у меня есть функция двоичного поиска. Мне нужно найти цель, которая представляет собой заданное имя пользователя в массиве.

Чтобы выполнить итерацию, я использую функцию compareTo для сравнения заданной строки имени пользователя с одной в списке (есть ли лучший способ сделать это? ).

Проблема : Имя пользователя обнаруживается, когда в списке есть два имени пользователя. Однако с 3 именами пользователей двоичный поиск прерывается (ничего не найдено).

ОБНОВЛЕНИЕ: строковые имена пользователей в списке не отсортированы по лексикографу. c -алли - это проблема?

Примечание: я заметил, что начальная средняя точка всегда кажется последним индексом в массиве (?)

Вот функция

private  Member binarySearch(Member[] sortedArray, String target) {
  int l = 0;
  int r = sortedArray.length - 1;
  int midpoint = -1;

while (l <= r) {
    midpoint = l + (r - l)/2;

    if(sortedArray.length == 0) {
        return null; // list and divided to the point all elements check, and not found.
    }

        if (sortedArray[midpoint] !=null &&
                target.compareTo(sortedArray[midpoint].getUsername()) == 0) { // eventually the only element left after recursive elimination will be midpoint  i.e.
            System.out.println("midpoint found: " + sortedArray[midpoint].getUsername());

            return sortedArray[midpoint]; // member username found for the given "target" member id
        } else if (sortedArray[midpoint] !=null &&
                target.compareTo(sortedArray[midpoint].getUsername()) > 0) { // midpoint greater than target
            l = midpoint + 1;
            if(sortedArray[midpoint] !=null) {
                System.out.println("right side:User searching..." + sortedArray[midpoint].getUsername()
                + " at index" + midpoint);
            }
        } else { // midpoint is less than target
            r = midpoint - 1;
            if(sortedArray[midpoint] !=null) {
                System.out.println("left side:User searching..." + sortedArray[midpoint].getUsername());
            }
        }

}

return null; // array given is length 0 or 1 element.
}

Функция, в которой я вызываю binarySearch:

public Member find(String username) {
                Member foundMember = this.binarySearch(this.member, username);

                if(foundMember != null) {
                    return foundMember;
                } else {
                    return null;
                }
            }

Некоторая функция, которая добавляет к массиву членов

function xx() {
        this.members[0] = admin;
        this.members[1] = testUser;
        this.members[2] = bri;  // if i remove this element it finds the prev two ?!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...