Exponential Search Code:
// Rename the file to SearchExponentialSearch.java before running it
import java.util.Arrays;
public class SearchExponentialSearch {
public int exponentialSearch(int[] nums, int toSearch){
if (nums[0] == toSearch) {return 0;}
int partitionEndIdx=1;
while ((partitionEndIdx < nums.length)&& (nums[partitionEndIdx] <=toSearch)) {
partitionEndIdx=partitionEndIdx*2;
}
int cappedEndIdx=partitionEndIdx;
if (cappedEndIdx > nums.length) {
cappedEndIdx=nums.length;
}
return Arrays.binarySearch(nums, partitionEndIdx/2, cappedEndIdx, toSearch);
}
public static void main(String[] args) {
/***********************
Test cases given below:
**********************/
int retVal;
try {
SearchExponentialSearch search=new SearchExponentialSearch();
int[] nums= { 3,22,44,67,77,96,122, 244};
int toSearch=96;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\nArray:");
int arrayIndex=0;
for (arrayIndex=0; arrayIndex < nums.length; arrayIndex++) {
System.out.print(nums[arrayIndex]+", ");
}
System.out.println("\n\n"+toSearch + " found at index "+ retVal);
toSearch=122;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=77;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=3;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=22;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=44;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=67;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=244;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=-1;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
toSearch=301;
retVal=search.exponentialSearch(nums, toSearch);
System.out.println("\n"+toSearch + " found at index "+ retVal);
}catch (Exception exception) {
System.out.print("Exception: "+ exception);
exception.printStackTrace();
}
}
}