Используйте вот такой набор тестов для проверки двоичного поиска.
public static int binarySearch(int[] a, int value) {
//ищем значение от индекса l до индекса r
// -----------------------
// l m r
// --------
int l = 0;
int r = a.length - 1;
while (l < r) {
int m = (l + r) / 2; //середина диапазона
if (a[m] == value)
return m;
else if (a[m] > value)
r = m;
else
l = m;
}
return -1;
}
public static void test(int[] a, int value, int correctAnswer) {
// Looking for 'value' in 'a'
int actualAnswer = binarySearch(a, value);
if (actualAnswer == correctAnswer)
System.out.println("ok");
else
System.out.println(
"Got " + actualAnswer + " instead of " + correctAnswer
);
}
public static void main(String[] args) {
int[] a = {1, 4, 5, 10, 20, 100};
test(a, 5, 2);
test(a, 1, 0);
test(a, 100, 5);
test(a, 42, -1);
test(a, 120, -1);
test(a, 0, -1);
int[] b = {1, 4, 6, 65, 100};
test(b, 0, -1);
test(b, 1, 0);
test(b, 2, -1);
test(b, 4, 1);
test(b, 5, -1);
test(b, 6, 2);
test(b, 10, -1);
test(b, 65, 3);
test(b, 70, -1);
test(b, 100, 4);
test(b, 200, -1);
int[] c = {1, 4, 6, 65, 100, 110};
test(c, 0, -1);
test(c, 1, 0);
test(c, 2, -1);
test(c, 4, 1);
test(c, 5, -1);
test(c, 6, 2);
test(c, 10, -1);
test(c, 65, 3);
test(c, 70, -1);
test(c, 100, 4);
test(c, 105, -1);
test(c, 110, 5);
test(c, 200, -1);
test(new int[]{}, 42, -1);
test(new int[]{42}, 0, -1);
test(new int[]{42}, 42, 0);
test(new int[]{42}, 100, -1);
test(new int[]{10, 20}, 0, -1);
test(new int[]{10, 20}, 10, 0);
test(new int[]{10, 20}, 15, -1);
test(new int[]{10, 20}, 20, 1);
test(new int[]{10, 20}, 25, -1);
}