I have a sorted array that rotates n times, n is unknown. Now I want to search for an element using binary search in O (nlog n). I implemented the following code, it works great. But I think that the condition if ((end-start) == 1) can be skipped by making some changes, can anyone suggest?
Eg of array 1 2 3 4 5
2 3 4 5 1
the code:
public static int srch(int a[],int start,int end,int key){
if(start>end)
return -1;
if((end-start)==1 ){
if(key==a[start])
return start;
else if(key==a[end])
return end;
else
return -1;
}
int mid = (start+end)/2;
if(a[mid]== key){
return mid;
}
else{
if(a[start] < a[mid] ){
//first half is sorted
if(key>a[mid]|| key <a[start]){
start= mid+1;
}else{
end =mid-1;
}
}else{
//second half is sorted
if(key>a[mid]){
start= mid+1;
}else{
end =mid-1;
}
}
return srch(a, start, end, key);
}
}
Any better / simpler / more efficient solution?
source
share