Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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_Binary Search - Fatal编程技术网

二进制搜索Java

二进制搜索Java,java,binary-search,Java,Binary Search,我正在做一个项目,在这个项目中,它从.txt文件中读取书籍标题并将它们放入arraylist,然后arraylist转换为数组,用户输入一个数字作为书籍参考号,然后进行线性搜索和二进制搜索以查找该书。我只是觉得二进制搜索的代码有点问题,因为我几乎不知道怎么做,下面是我的: private void FindItActionPerformed(java.awt.event.ActionEvent evt) { St

我正在做一个项目,在这个项目中,它从.txt文件中读取书籍标题并将它们放入arraylist,然后arraylist转换为数组,用户输入一个数字作为书籍参考号,然后进行线性搜索和二进制搜索以查找该书。我只是觉得二进制搜索的代码有点问题,因为我几乎不知道怎么做,下面是我的:

   private void FindItActionPerformed(java.awt.event.ActionEvent evt) {                                       
String input;

input = Input.getText();

for(int i=0; i<bookList.length; i++){
if (bookList[i].referenceNumber.equals(input)){
    Output1.setText("The Book is " + bookList[i].title);
}
}
private void FindItActionPerformed(java.awt.event.ActionEvent evt){
字符串输入;
input=input.getText();

对于(inti=0;i,在 例如,尝试输入FL并观察算法一步一步地寻找它。 你会很快得到它:)

它的工作原理就像在字典中查找一个单词……例如,您正在查找“cat”, 所以你把字典对半打开,看到单词“man”这在字典上比“cat”大,所以你会在字典的前半部分从“man”=向左看


然后你只需重复这个过程,将其分成更小的部分,直到找到你想要的东西。

我在学习编写二进制搜索代码时也遇到了问题。你应该知道的第一件事是,你不必做二进制搜索和线性搜索,你只需要做一个或另一个。你也可以做二进制搜索需要对数组进行排序exint[]数组={1,2,3,4,5,6,7,8,9,10}; 二进制搜索所做的是查看数组中的中间元素,并测试该元素是否大于或小于键。如果小于所有值,则忽略中间元素(与较大值相同,只是丢弃所有较大值)。然后选择一个新的中间元素并丢弃一半,直到找到键为止。下面是对int数组进行排序的代码,您需要修改它以返回书籍(string?或您可能编写的类书)


请在发布之前做一些基础研究:我们需要排序数组来进行二进制搜索吗。。。
int right = 0, left = bookList.length;
while(right<= left){
    int middle = (right + left)/2;
    if( bookList[middle].referenceNumber.equals(input)){
        Output2.setText("The book is " + bookList[middle].title);     
    }
}

}    
 public class Book{
String referenceNumber, title;

public Book(String _referenceNumber, String _title){
   referenceNumber = _referenceNumber;
   title = _title;
}
}

 ArrayList <Book> Books = new ArrayList <Book> ();
 Book [] bookList;
public static boolean binarySearch(int[] array, int key){
    int partition = 0;
    int right = array.length - 1;
    boolean found = false;
    int left = 0;






    while(! found && left <= right){

        if(array[partition] == key){
            found = true;
        }


    if(array[partition] > key){//key less
        right = partition - 1;
        partition = (right + left) / 2;
    }

    if(array[partition] < key){//key greater
        left = partition + 1;
        partition = (left + right) / 2;


    }



    }
    return found;

}
public int[] bubbleSort(int[] array){
    int temp;
    boolean keepGoing = true;

    while(keepGoing == true){
    keepGoing = false;
        for(int i=0; i < array.length - 1; i++){
        if(array[i] > array [i + 1]){ //if i < i + 1 means greatest to smallest if 
                                        // if i > i + 1 means smallest to greatest
            swap(array, i, i + 1);
            keepGoing = true;

        }
    }
    }


    return array;

    }
public int[] swap(int[] array, int i, int j){
    int temp = 0;
    temp = array[i];
    array[i] = array[j];
    array[j] = temp;
    return array;
}