Here is the code ....
public class ExponentialSearch {
public static void main(String[] args) {
// Array of items on which search will
// be conducted.
int arr[] = new int[] { 10, 12, 13, 16, 18, 19, 20, 21, 22, 23, 24, 33, 35, 42, 47 };
int valueToSearch = 24;
int i = 1;
if (arr[0] == valueToSearch) {
System.out.println("ELement found at location");
return;
}
while (i < arr.length && arr[i] <= valueToSearch) {
i = i * 2;
int loc = binarySearrch(arr, valueToSearch, i / 2, min(i, arr.length - 1));
if (loc != -1) {
System.out.println("Element found at location : " + loc);
break;
}
}
}
public static int binarySearrch(int[] arr, int valueToSearch, int startIndex, int lastIndex) {
if (lastIndex == startIndex) {
if (arr[lastIndex] == valueToSearch)
return lastIndex;
else
return -1;
} else {
int mid = (startIndex + lastIndex) / 2;
if (arr[mid] == valueToSearch)
return mid;
else if (arr[mid] > valueToSearch)
return binarySearrch(arr, valueToSearch, startIndex, mid - 1);
else
return binarySearrch(arr, valueToSearch, mid + 1, lastIndex);
}
}
public static int min(int i, int j) {
if (i < j)
return i;
else
return j;
}
}