자료의 가운데에 있는 항목의 키 값과 비교하여 다음 검색의 위치를 결정하고 검색을 계속 진행하는 방법
이진검색은 이진탐색, 이분탐색이라고도 한다. 목적 키를 찾을 때까지 이진 검색을 순환적으로 반복 수행해, 검색범위를 반으로 줄여가면서 보다 빠르게 검색을 수행한다.
자료가 정렬된 상태여야 한다.

O(logN)이다. 찾기에 실패할 경우에도 같다.
Java에서는 이진 검색의 라이브러리 binarySearch를 제공한다.
int [] arr = {1,2,3,4,5,6,7};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 3);
// 배열arr에서 값이 3인 값의 인덱스 선택

정렬 상태를 유지한 채 x를 삽입할 수 있는 첫 번째 위치
static int lowerBound(List<Integer> data, int target) {
int begin = 0;
int end = data.size();
while(begin < end) {
int mid = (begin + end) / 2;
if(data.get(mid) >= target) {
end = mid;
}
else {
begin = mid + 1;
}
}
return end;
}
정렬 상태를 유지한 채 x를 삽입할 수 있는 마지막 위치
static int upperBound(List<Integer> data, int target) {
int begin = 0;
int end = data.size();
while(begin < end) {
int mid = (begin + end) / 2;
if(data.get(mid) <= target) {
begin = mid + 1;
}
else {
end = mid;
}
}
return end;
}