加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java BinarySearch

发布时间:2020-12-14 23:43:22 所属栏目:Java 来源:网络整理
导读:我能得到一些帮助吗?我已经尝试了很多方法来使这个工作我得到数组排序和打印但之后我的二进制搜索功能不想运行并给我正确的结果.它总是给我-1.有帮助吗? public class BinarySearch {public static final int NOT_FOUND = -1;public static int binarySear
我能得到一些帮助吗?我已经尝试了很多方法来使这个工作我得到数组排序和打印但之后我的二进制搜索功能不想运行并给我正确的结果.它总是给我-1.有帮助吗?
public class BinarySearch {
public static final int NOT_FOUND = -1;
public static int binarySearch(double[] a,double key) {
    int low = 0;
    int high = a.length -1;
    int mid;
    while (low<=high) {
        mid = (low+high) /2;
        if (mid > key) 
            high = mid -1;
        else if (mid < key) 
            low = mid +1;
        else 
            return mid;
    }
    return NOT_FOUND;
}
public static void main(String[] args) {
    double key = 10.5,index;
    double a[] ={10,5,4,10.5,30.5};
    int i;
    int l = a.length;
    int j;
    System.out.println("The array currently looks like");
    for (i=0; i<a.length; i++)
        System.out.println(a[i]);
    System.out.println("The array after sorting looks like");
    for (j=1; j < l; j++) {
        for (i=0; i < l-j; i++) {
            if (a[i] > a[i+1]) {
                double temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
            }
        }
    }
    for (i=0;i < l;i++) {
        System.out.println(a[i]);
    }
    System.out.println("Found " + key + " at " + binarySearch(double a[],key));
}   
}

解决方法

你实际上并没有与数组值进行比较.在
while (low <= high) {
      mid = (low + high) / 2;
      if (mid > key) {
          high = mid - 1;
      } else if (mid < key) {
          low = mid + 1;
      } else {
          return mid;
      }
}

而是使用此部分

while (low <= high) {
        mid = (low + high) / 2;
        if (a[mid] > key) {
            high = mid - 1;
        } else if (a[mid] < key) {
            low = mid + 1;
        } else {
            return mid;
        }
    }

你找对索引是正确的,但你所做的是你只是将索引号与你的密钥进行比较,这显然是不正确的.当您编写[mid]时,您实际上会将您的密钥与索引中间的数字进行比较.

最后一行代码也是编译错误,应该是

System.out.println("Found " + key + " at " + binarySearch(a,key));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读