새소식

인기 검색어

비트교육_단기과정

이진검색 재귀함수 : 마기창

  • -

1. index 번호를 매개변수로 사용하여 기능 구현

package week_4;
 
// 이진 검색
 
import java.util.Scanner;
 
class BinSearch_RecurExam {
    private static int binSearch(int[] x, int first, int end, int key) {
 
        int middle = (first + end) / 2;
        if (first > end) {
            return -1;
        } else {
            if (x[middle] == key) {
                return middle;
            } else if (x[middle] < key) {
                first = middle + 1;
                return binSearch(x, first, end, key);
            } else {
                end = middle - 1;
                return binSearch(x, first, end, key);
            }
        }
    }
 
    public static void main(String[] args) {
 
        Scanner stdIn = new Scanner(System.in);
 
        System.out.print("요솟수: ");
        int num = stdIn.nextInt();
        int[] x = new int[num]; // 요솟수가 num인 배열
 
        System.out.println("오름차순으로 입력하세요.");
 
        System.out.print("x[0]: "); // 첫 요소 읽력받음
        x[0= stdIn.nextInt();
 
        for (int i = 1; i < num; i++) {
            do {
                System.out.print("x[" + i + "]: ");
                x[i] = stdIn.nextInt();
            } while (x[i] < x[i - 1]); // 바로 앞의 요소보다 작으면 다시 입력받음
        }
 
        System.out.print("검색할 값: "); // 킷값을 읽어 들임
        int ky = stdIn.nextInt();
 
        int idx = binSearch(x, 0, num - 1, ky); // 배열 x에서 값이 ky인 요소를 검색
 
        if (idx == -1)
            System.out.println("검색 값의 요소가 없습니다.");
        else
            System.out.println("검색 값은 x[" + idx + "]에 있습니다.");
    }
}
cs

2. 배열을 재생성하여 기능 구현

package week_4;
import java.util.Arrays;
import java.util.Comparator;
// 이진 검색
import java.util.Scanner;
class BinSearch_RecurExam {
    public static int binSearch(int[] a, int keyValue) {
        if (a.length == 0)
            return -1;
        int startIndex = 0// 시작인덱스
        int endIndex = a.length - 1// 마지막 인덱스
        int middleIndex = (startIndex + endIndex) / 2;
        if (keyValue == a[middleIndex]) {
            return middleIndex;
        } else {
            if (keyValue < a[middleIndex]) {
                int[] b = Arrays.copyOfRange(a, 0, middleIndex);
                return middleIndex = binSearch(b, keyValue);
            } else {
                int[] b = Arrays.copyOfRange(a, middleIndex + 1, a.length);
                return middleIndex = binSearch(b, keyValue) + a.length / 2;
            }
        }
    }
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        System.out.print("요솟수: ");
        int num = stdIn.nextInt();
        int[] x = new int[num]; // 요솟수가 num인 배열
        System.out.println("오름차순으로 입력하세요.");
        System.out.print("x[0]: "); // 첫 요소 읽력받음
        x[0= stdIn.nextInt();
        for (int i = 1; i < num; i++) {
            do {
                System.out.print("x[" + i + "]: ");
                x[i] = stdIn.nextInt();
            } while (x[i] < x[i - 1]); // 바로 앞의 요소보다 작으면 다시 입력받음
        }
        System.out.print("검색할 값: "); // 킷값을 읽어 들임
        int ky = stdIn.nextInt();
        int idx = binSearch(x, ky); // 배열 x에서 값이 ky인 요소를 검색
        if (idx == -1)
            System.out.println("검색 값의 요소가 없습니다.");
        else
            System.out.println("검색 값은 x[" + idx + "]에 있습니다.");
    }
}
cs
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.