import java.util.Random;
public class SearchBench {
int min, max, step, searches;
Random random;
public double timeSearches(SearchList<Integer> numbers){
int reps;
if (searches<=0)
reps = numbers.size();
else
reps = searches;
long startTime = System.nanoTime();
for (int j=0; j<reps; j++){
int target = random.nextInt(numbers.size());
int pos = numbers.positionOf(target);
}
long endTime = System.nanoTime();
return (double)(endTime-startTime)/reps;
}
public void fill(SearchList<Integer> numbers, int size){
for (int i=0; i<size; i++){
numbers.add(random.nextInt(size));
}
}
public SearchBench(String [] args) {
min = Integer.parseInt(args[0]);
max = Integer.parseInt(args[1]);
step = Integer.parseInt(args[2]);
if (args.length <= 3)
searches = -1;
else
searches = Integer.parseInt(args[3]);
random = new Random();
}
public void doRuns() {
for (int size=min; size<=max; size+=step){
System.out.print(size+"\t");
SearchList<Integer> numbers = new SearchList<Integer>();
fill(numbers, size);
System.out.print(timeSearches(numbers));
BinarySearchList<Integer> bnumbers = new BinarySearchList<Integer>();
fill(bnumbers, size);
System.out.println("\t"+timeSearches(bnumbers));
}
}
static public void main(String [] args) {
SearchBench bench = new SearchBench(args);
bench.doRuns();
}
}