package Search;
import java.util.Scanner;
public class BinSearch {
static int binSearch(int[]a, int n, int key) { //
//int [] a == a라는 배열 ( 검색값이 입력되어있는 DB)
//int n == 요소수
//int key == 검색값 (사용자의)
int pl = 0; //검색값 첫번째 수
int pr = n-1; //검색값의 마지막 수
do {
int pc= (pl+pr)/2; //검색범위의 중위값
if(a[pc] == key) //중위값이 검색값이면 pc 반환
return pc;
else if (a[pc]<key) //중위값이 검색값보다 아래에 있으면 검색값 첫번째수가 현재 중위값의 위값
pl = pc+1;
else pr = pc - 1; //검색범위를 앞쪽 절반으로 좁힘
}
while (pl>= pr); //검색 마지막 범위가 첫번재범위보다 작으면 (검색이 완료가 되면) return -1 반환한다.
return -1; //검색 실패값 반환
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
//2. 요솟수가 num인 배열 생성
System.out.println("요솟수를 입력하세요");
int num=scan.nextInt();
int x[] = new int[num]; // 심화공부해야함
//2. DB값을 입력해주기
System.out.println("오름차순으로 입력하세요");
System.out.println("x[0]");
x[0] = scan.nextInt();
//첫 요소 입력
//이미 요소수를 위에서 입력해주었으므로, 한정적으로 끝나게 되어있음.입력시에.
for(int i=1; i<num; i++) {
do {
System.out.println("x["+i+"]=" );
x[i] = scan.nextInt();
}
while (x[i]<x[i-1]); //앞의 요소보다 작으면 다시 입력
}
System.out.println("검색값 입력하세요 [key]");
int key = scan.nextInt();
int idx = binSearch(x,num,key);
if(idx== -1) System.out.println("검색값 없음");
else System.out.println(key+"는"+idx+"에 있음");
}
}