我的代码有什么问题?有人可以帮我吗[关闭]

问题描述 投票:-1回答:1
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。有人可以告诉我我在做什么错。
java binary-search
1个回答
1
投票
如上所述,您丢失了return语句,并且通过忽略所有返回的值,还需要使用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;

为了避免整数溢出。
© www.soinside.com 2019 - 2024. All rights reserved.