특징
- 정렬된 상태의 데이터에서 특정 값을 빠르게 탐색하는 방법
- 찾고자 하는 값과 데이터 중앙에 있는 값을 비교
- 찾고자 하는 값이 더 작으면 데이터 왼쪽 부분에서 이진 탐색
- 찾고자 하는 값이 더 크면 데이터 오른족 부분에서 이진 탐색
- O(logN)
탐색 과정
- 30을 찾는 과정

소스코드
public class Main {
public static int binarySearch(int arr[], int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (target == arr[mid]) {
return mid;
} else if (target < arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
public static int binarySearch2(int[] arr, int target, int left, int right) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
if (target == arr[mid]) {
return mid;
} else if (target < arr[mid]) {
return binarySearch2(arr, target, left, mid - 1);
} else {
return binarySearch2(arr, target, mid + 1, right);
}
}
public static void main(String[] args) {
int[] arr = {1, 2, 5, 10, 20, 30, 40, 50, 60};
System.out.println("Index: " + binarySearch(arr, 30));
System.out.println();
System.out.println("Index: " + binarySearch2(arr, 30, 0, arr.length - 1));
}
}
JAVA 기본 라이브러리 활용
- '해당 데이터가 있을 경우의 위치'란 순서대로 정렬되어 있는 값에서 그 값이 있을 위치
import java.util.Arrays;
public class Main2 {
public static void main(String[] args) {
int[] arr = {1, 2, 5, 10, 20, 30, 40, 50, 60};
System.out.println("== 데이터가 있는 경우 ==");
System.out.println(Arrays.binarySearch(arr, 1));
System.out.println(Arrays.binarySearch(arr, 10));
System.out.println(Arrays.binarySearch(arr, 30));
System.out.println("== 데이터가 없는 경우 ==");
System.out.println(Arrays.binarySearch(arr, 3));
System.out.println(Arrays.binarySearch(arr, 11));
System.out.println(Arrays.binarySearch(arr, 35));
}
}