class Driver { private static int numComparisons; public static void main(String[] args) { for (int length = 1; length <= 30; length +=1) { int[] array = new int[length]; for (int index = 0; index < length; index +=1) { array[index] = index; } double binaryTotal = 0.0; double linearTotal = 0.0; for (int element = 0; element < length; element +=1) { binaryTotal += binarySearch(array,element); linearTotal += linearSearch(array,element); } double binaryAverage = binaryTotal / length; double linearAverage = linearTotal / length; System.out.println(length + " " + binaryAverage + " " + linearAverage); } } public static int linearSearch(int[] array, int element) { numComparisons = 0; int index = 0; while(array.length >= index && !isEqual(array[index],element)) { index += 1; } return numComparisons; } public static int binarySearch(int[] array, int element) { //-1 on failure //index [int] on success. numComparisons = 0; int left = 0; int right = array.length-1; int middle = (left + right)/2; while(left <= right && !isEqual(array[middle],element)) { if(greaterThan(array[middle],element)) { //element is on the left, or lowerhalf right = middle-1; } else { //Upper, or right half left = middle+1; } middle = (left + right) /2; } if(isEqual(array[middle],element)) { // I must have found it. return numComparisons; } else { return numComparisons; //not found :( } } public static boolean isEqual(int a, int b) { numComparisons += 1; return a == b; } public static boolean greaterThan(int a, int b) { numComparisons += 1; return a > b; } }