package vn.edu.rmit.examples;
public class BinarySearch implements SearchStrategy {
// assumes data is sorted...
@Override
public boolean execute(int[] data, int item) {
if(data.length == 1) {
return data[0] == item;
} else {
int pivotPos;
if(data.length % 2 == 0) {
pivotPos = data.length / 2;
} else {
pivotPos = (data.length / 2) + 1;
}
int pivot = data[pivotPos];
int[] newData = new int[pivotPos+1]; // ensure enough room
if (item < pivot) {
for(int i=0; i<pivotPos;i++) {
newData[i] = data[i];
}
execute(newData, item);
} else if(item > pivot) {
for(int i=pivotPos; i<data.length; i++) {
newData[i-pivotPos] = data[i];
}
execute(newData, item);
} else { // item == pivot -> found!
return true;
}
}
return false; //should never get here
}
}