2014-04-25 4 views
-1

임 .txt 파일에서 책 제목을 읽고이를 arraylist에 넣은 프로젝트에서 작업하면 arraylist가 배열로 변환됩니다. 사용자는 책 참조 번호 인 숫자를 입력합니다 , 그런 다음 선형 검색과 이진 검색을 수행하여 해당 책을 찾습니다.바이너리 검색 Java

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); 
} 
} 

이 이상 잘 작동 선형 검색, 코드입니다 : 내가 가지고 heres는 무엇인지, 그것을 수행하는 방법 거의 아무 생각으로 임은, 이진 검색을위한 코드로 문제가. 아래는 내가 이진 검색을 위해 필요하다고 생각하지만 다시는 모르겠다. 알아낼 수 없다.

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; 

덕분에이 나를 ​​위해 조금 까다 롭습니다이다.

+0

이 게시하기 전에 몇 가지 기본적인 연구를하시기 바랍니다 아래의 방법 스왑이 책을 정렬을 수정해야 할 것입니다 간단합니다 여기 : http://en.wikipedia.org/wiki/Binary_search_algorithm#Iterative –

+1

바이너리 검색을 위해 정렬 된 배열이 필요한가요? ... –

답변

0

http://balance3e.com/Ch8/search.html 예를 들어 FL에 들어가서 알고리즘을 단계별로 찾아 봅니다. 빨리 얻을 수 있습니다 :)

예를 들어 과 같이 "cat"을 찾고 "word"라는 단어를 볼 수 있습니다. "고양이"보다 사전 식 사전 식이므로 사전의 전반부에있는 "남자"에서 왼쪽을 볼 것입니다 ...

그런 다음이 작은 부분으로 나누는 과정 만 반복하면됩니다. 찾고 있었다.

1

바이너리 검색을 코딩 할 때도 문제가있었습니다. 가장 먼저 알아둬야 할 것은 바이너리 검색과 선형 검색을 수행 할 필요가 없으며 둘 중 하나만 수행하면됩니다. 또한 바이너리 검색을하려면 배열을 정렬해야합니다. ex int [] array = {1,2,3,4,5,6,7,8,9,10}; 바이너리 검색은 배열의 가운데 요소를보고 요소가 키보다 크거나 작은 지 테스트합니다. 덜 적은 모든 것보다 작 으면 중간 요소는 무시됩니다 (더 큰 것은 모두 더 크게 버립니다). 그런 다음 새로운 중간 요소가 선택되고 절반이 버려지고 키가 발견 될 때까지 수행됩니다. 다음은 int 배열을 정렬하는 코드가, 당신은 또한 여기에 int 배열을 정렬하는 몇 가지 코드가

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; 

} 

를 도서 반환을 수정해야합니다 (문자열을? 또는 클래스 책은 당신이 쓴 수있다). 이 버블 정렬 그래서^2

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; 
}