Ваше решение не выполняется для массива {4,5,1,2,3} и ключа = 4.
Я думаю, что модификация во второй части решит проблему
else{
//second half is sorted
if(key>a[mid] && key<=a[end]){// modified condition
start= mid+1;
}else{
end =mid-1;
}
Но я думаю, что условие
if ((end-start) == 1) может быть пропущен
вносить некоторые изменения, может любой
предложить?
Полагаю, это условие вообще не требуется.
Можете ли вы предложить тестовый пример, который не подходит для вашего измененного кода.
public static int srch(int a[],int start,int end,int key){
if(start>end)
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] && key<=a[high]){
start= mid+1;
}else{
end =mid-1;
}
}
return srch(a, start, end, key);
}
}