我需要使用二分查找来定位数组中的 45.3。这是我到目前为止所拥有的。
public class Bsearch {
public static final int NOT_FOUND = -1;
public static int binarySearch(int[] a, int x) {
int low = 0;
int high = a.length - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid].compareTo(x) < 0)
low = mid + 1;
else if (a[mid].compareTo(x) > 0)
high = mid - 1;
else
return mid;
}
return NOT_FOUND;
}
public static void main(String[] args) {
int SIZE = 6;
int[] a = new Integer[SIZE] = { 10, -3, 5, 24, 45.3, 10.5 };
System.out.println("45.3 Found" + binarySearch(a, 45.3));
}
}
我所有的错误似乎都源于这个领域-
int [] a = new Integer [ SIZE ]={ 10,-3,5,24,45.3,10.5 };
System.out.println("45.3 Found" +binarySearch(a, 45.3));
这一切对我来说都是新的,对于任何明显的错误,我深表歉意。
最佳答案
对于二分搜索数据数组应该排序,并按正确的顺序排序,但是传递给binarySearch(int[] a, int x)的数组没有排序,所以首先对数组进行排序,然后应用二分搜索它。 另请检查您的二分搜索逻辑,您正在将中间元素与 0 进行比较,它应该与要搜索的元素(key)进行比较
while(high >= low) {
int middle = (low + high) / 2;
if(data[middle] == key) {
return true;
}
if(data[middle] < key) {
low = middle + 1;
}
if(data[middle] > key) {
high = middle - 1;
}
}
关于java - 使用二分查找在数组中查找值 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29159274/