import java.util.Random; import java.util.Arrays; class BinarySearch { public static int count = 0; protected static int searchRec(int[] a, int value, int low, int high) { count++; if (low > high) { return -1; } int mid = (high - low)/2 + low; if (value == a[mid]) { return mid; } else if (value < a[mid]) { return searchRec(a, value, low, mid - 1); } else { return searchRec(a, value, mid + 1, high); } } public static int search(int[] a, int value) { return searchRec(a, value, 0, a.length - 1); } public static void main(String[] args) { // try making ARRSZ bigger if you want // to see how fast binary search can be! final int ARRSZ = 10; Random r = new Random(); // fill array with random values int[] data = new int[ARRSZ]; for (int i = 0; i < ARRSZ; i++) { data[i] = r.nextInt(); } // sort array Arrays.sort(data); // print System.out.println(Arrays.toString(data)); // thing to search for int ridx = r.nextInt(data.length); int value = data[ridx]; // search int idx = search(data, value); // print results System.out.println("Looking for value " + value + "."); System.out.println("Found at index = " + idx); System.out.println("Which is " + (idx == ridx ? "correct" : "incorrect")); // print number of steps-- pretty good! // count should be: ceil(log2(n)) System.out.println(count); // search for thing not likely to be in array int idx2 = search(data, 0); System.out.println(idx2); } }