public class BinarySearch {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50,60,70,80};
int index = search(arr,80,0,arr.length-1);
if(index == -1) {
System.out.println("element not found");
}
else {
System.out.println("element is present at index:"+index);
}
}
public static int search(int[] arr,int x,int start, int end) {
if(start>end) {
return -1;
}
int mid = (int)(Math.floor(start+end)/2);
if(arr[mid]==x) {
return mid;
}
else if(arr[mid]>x) {
search(arr,x,start, (mid-1));
}
else {
search(arr,x, (mid+1),arr.length-1);
}
return -1;
}
}
我们可以看到我正在搜索80,而我的代码正在击中语句return mid;但程序仍返回-1。有人可以告诉我我在做什么错。
end
而不是else语句中的数组长度来执行此操作:else if(arr[mid] > x)
{
return search(arr, x, start, (mid - 1));
} else {
return search(arr, x, (mid + 1), end);
}
也是计算中间值的更好方法是:
int mid = start + (end - start) / 2;
为了避免整数溢出。