java - 使用二分查找在数组中查找值 (Java)

标签 java search binary

我需要使用二分查找来定位数组中的 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/

相关文章:

Ruby 中的 Java 兼容 REST 客户端

c# - 在列表中搜索匹配对象并赋值

java - JAVA中子资源依赖问题

search - 在NSArray中搜索字符串

java - 在 Java 中实现 Soundex

php - 在 Linux 上的二进制文件中提取到 x00 的特定偏移量之后的字符串

linux - 创建可移植和静态的 fortran linux 二进制文件?

algorithm - 如何求一个8位二进制数中第一个和最后一个1的距离

java - 在 REST 帖子上发回文件列表

java - 从 Android 设备到亚马逊网络服务器 S3 的 HTTP 直播