Binary Search 기본
- 배열 내부의 데이터가 정렬되어 있어야만 사용 할 수 있는 알고리즘
- 탐색 범위를 절반씩 좁혀가며 데이터를 탐색
시작점(start)
, 끝점(end)
, 중간점(mid)
변수 사용
- 재귀함수와 반복문을 이용하여 구현
Binary Search 과정
- 데이터들을 정렬
- 찾으려는 데이터
target
과 중간점 mid
위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾음
- 구할 값이 중간점 위치의 값보다 크면 우측 탐색
- 구할 값이 중간점 위치의 값보다 작으면 좌측 탐색
start ≥ end
가 될 때 까지 반복
Binary Search 구현
재귀함수 구현
public static int binarySearch(int[] arr, int target, int start, int end) {
if (start > end) {
return -1;
}
int mid = (int)((start + end) / 2);
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] > target) {
return binarySearch(arr, target, start, mid-1);
}
else {
return binarySearch(arr, target, mid+1, end);
}
}
반복문 구현
public static int binarySearch(int[] arr, int target, int start, int end) {
while (start <= end) {
int mid = (int)((start + end) / 2);
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] > target) {
end = mid - 1;
}
else {
start = mid + 1;
}
}
return -1;
}