这个程序适用于整数,但不是双打。没有错误,但程序返回-1。对不起,如果这是一个愚蠢的问题,但我是编程新手。
public class binarySearchProject
{
public static int binarySearch(double[] arr, double x, int high, int low)
{
int mid=(high+low)/2;
if(high==low || low==mid || high==mid)
{
return -1;
}
if(arr[mid]>x)
{
return binarySearch(arr, x, high, mid);
}
else if(arr[mid]<x)
{
return binarySearch(arr, x, mid, low);
}
else if(arr[mid]==x)
{
return mid;
}
return -1;
}
public static void main(String args[])
{
double i = 45.3;
double[] a = {-3, 10, 5, 24, 45.3, 10.5};
int size = a.length;
System.out.println(binarySearch(a, i, size, 0));
}
}
答案 0 :(得分:5)
您应该更改条件:
if(arr[mid]>x)
应为if(arr[mid]<x)
else if(arr[mid]<x)
应为else if(arr[mid]>x)
另请注意,为了使其工作,必须对数组进行排序(这是二进制搜索的重点),您可以使用Arrays#sort
:
Arrays.sort(a);
另外,我建议您将类重命名为大写(遵循Java命名约定)。
答案 1 :(得分:2)
正如@tobias_k所指出的那样:
要使二进制搜索起作用,您需要先对数组进行排序。 有关详细信息,请参阅Wikipedia。