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 + "]에 있습니다.");
}
}