public class Programma {
public static void main(String args[]) {
int array[] = { 1, 2, 4, 5, 6, 7, 8 };
int v = 4;
int first = 0;
int last = 6;
if (binary_search(array, v, first, last) == 1) {
System.out.println("Value " + v + " found!");
} else {
System.out.println("Value " + v + " not found.");
}
}
static int binary_search(int array[], int v, int first, int last) {
if (first > last) {
return 0;
}
int m = (first + last) / 2;
System.out.println("Actual m is: " + m + " of " + first + last);
if (array[m] == v) {
return 1;
} else if (v > array[m]) {
binary_search(array, v, m + 1, last);
} else {
binary_search(array, v, first, m - 1);
}
return -1;
}
}
Output is:
Actual m is: 3 of 06
Actual m is: 1 of 02
Actual m is: 2 of 22
Value 4 not found.
I really don't understand why the first and the last become from 06 to 02, when they should become 46, since 3 is smaller than 4.... I added the condition if (v>array[m]) that should do the work but it actually doesn't.