import java.util.Scanner;
public class BinarySearchRecursion {
// 2진검색 (재귀)
static int binarySearch(int[] arr, int start, int end, int key) { // (배열, 시작 인덱스, 끝 인덱스, 찾을 값)
if (start <= end) {
int mid = (start + end) / 2; //중앙값
if (arr[mid] == key) { // 중앙값이 찾을 값과 같다면 mid 리턴
return mid;
} else if (arr[mid] > key) {
return binarySearch(arr, start, mid -1, key); //중앙값이 찾으려는 값보다 크면 끝 인덱스를 중앙값-1로 설정
} else if (arr[mid] < key){
return binarySearch(arr, mid + 1, end, key); //중앙값이 찾으려는 값보다 작으면 시작 인덱스를 중앙값+1로 설정
}
}
return -1; //찾을 값이 없으면 -1
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = {1,3,5,7,9,11,13,14,16,17,18}; //정렬이 되어 있어야 한다.
for(int a : arr) {System.out.print(a+" ");} // 어레이 출력
System.out.println("\n찾을 값을 입력하세요 : ");
int user_input = sc.nextInt();
//만든 2진 검색 메서드 사용
System.out.println(binarySearch(arr, 0, arr.length-1, user_input) + "번째 인덱스에 존재");
}
}
'Java > 코딩테스트 연습 & 실습' 카테고리의 다른 글
[Java] 깊이우선탐색 (DFS) 미로찾기 스택구현 (2) | 2022.07.15 |
---|---|
[Java] 스택을 이용한 후위표기 계산기 (0) | 2022.07.14 |
[Java] (실습) Baby-gin (1) | 2022.07.11 |
[Java] (실습) 자바 정돈된 수 (0) | 2022.07.11 |
[Java] (실습) 자바 로또 프로그램 (0) | 2022.07.11 |