public class Main { public static final int NOT_FOUND = -1; public static int binarySearch(Comparable[] a, Comparable x) { return binarySearch(a, x, 0, a.length - 1); } private static int binarySearch(Comparable[] a, Comparable x, int low, int high) { if (low > high) return NOT_FOUND; int mid = (low + high) / 2; if (a[mid].compareTo(x) < 0) return binarySearch(a, x, mid + 1, high); else if (a[mid].compareTo(x) > 0) return binarySearch(a, x, low, mid - 1); else return mid; } public static void main(String[] args) { int SIZE = 8; Comparable[] a = new Integer[SIZE]; for (int i = 0; i < SIZE; i++) a[i] = new Integer(i * 2); for (int i = 0; i < SIZE * 2; i++) System.out.println("Found " + i + " at " + binarySearch(a, new Integer(i))); } }