Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用二进制搜索查找密钥_Java - Fatal编程技术网

Java 使用二进制搜索查找密钥

Java 使用二进制搜索查找密钥,java,Java,我正试图编写一个程序,使用二进制搜索在随机生成的数字数组中查找密钥。 当密钥为0或非常高的数字时,我无法让程序找到密钥。这是一个家庭作业,但是,我碰到了一堵墙,弄不明白。提前谢谢你的帮助 public static int binarySearch(int[] list, int key) { int low = 1; boolean foundKey = false; int high = list.length; int i = 0; while (

我正试图编写一个程序,使用二进制搜索在随机生成的数字数组中查找密钥。 当密钥为0或非常高的数字时,我无法让程序找到密钥。这是一个家庭作业,但是,我碰到了一堵墙,弄不明白。提前谢谢你的帮助

public static int binarySearch(int[] list, int key) {
    int low = 1;
    boolean foundKey = false;
    int high = list.length;
    int i = 0;

    while (high >= low) {
        i = i + 1;
        int mid = (low + high) / 2;

        if (key < list[mid]) {
            high = mid - 1;
        }

        if (key == list[mid]) {
            foundKey = true;
            break;
        }

        low = mid + 1;
    }

    if (foundKey == true)
        System.out.println("Key " + key + " found after " + i + " reads");
    else
        System.out.println("not found");

    return key;
}
公共静态int二进制搜索(int[]列表,int键){
int低=1;
布尔foundKey=false;
int high=list.length;
int i=0;
而(高>=低){
i=i+1;
int mid=(低+高)/2;
如果(键<列表[mid]){
高=中-1;
}
如果(键==列表[mid]){
foundKey=true;
打破
}
低=中+1;
}
if(foundKey==true)
System.out.println(“在“+i+”读取之后找到的键“+Key+”);
其他的
System.out.println(“未找到”);
返回键;
}

需要在程序中添加两个更正

  • int-low=1此处的低位应从
    0
    开始。因此,将其设置为
    int low=0
  • 没有设置
    low
    变量的条件,只有当您在二进制搜索算法中更改搜索方向/部分时,才必须执行该变量,因此添加以下代码

    else if(key > list[mid]) {
        low = mid + 1;
    }
    
  • mid
    计算之后添加一个检查,以确保
    mid
    指向有效的数组索引,如

    mid = (low + high)/2;
    if(mid < 0 || mid >= list.length) {
        break;
    }
    
    mid=(低+高)/2;
    if(mid<0 | | mid>=list.length){
    打破
    }
    

  • 最后,正如您在问题评论部分所说,列表是一个随机数序列这不是二进制搜索算法的有效输入。输入必须按顺序排序,请阅读此二进制搜索算法。

    需要在程序中添加两个更正

  • int-low=1此处的低位应从
    0
    开始。因此,将其设置为
    int low=0
  • 没有设置
    low
    变量的条件,只有当您在二进制搜索算法中更改搜索方向/部分时,才必须执行该变量,因此添加以下代码

    else if(key > list[mid]) {
        low = mid + 1;
    }
    
  • mid
    计算之后添加一个检查,以确保
    mid
    指向有效的数组索引,如

    mid = (low + high)/2;
    if(mid < 0 || mid >= list.length) {
        break;
    }
    
    mid=(低+高)/2;
    if(mid<0 | | mid>=list.length){
    打破
    }
    

  • 最后,正如您在问题评论部分所说,列表是一个随机数序列这不是二进制搜索算法的有效输入。输入必须按顺序排序,请阅读此二进制搜索算法。

    当您说随机生成的数字时,您的意思是这些数字也是按随机顺序排列的吗?此外,如果数字是随机的,您知道列表中有零吗?int[]数组是否正确排序?是的,这些数字是按照我用于(int i=1;i