Итак, у меня есть функция двоичного поиска. Мне нужно найти цель, которая представляет собой заданное имя пользователя в массиве.
Чтобы выполнить итерацию, я использую функцию 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 ?!
}