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