Binary Search(이진 탐색)은 정렬된 배열에서 값을 효율적으로 찾는 알고리즘입니다. 이진 탐색은 배열을 반복적으로 반을 나누며 검색 범위를 좁히기 때문에 시간 복잡도가 O(logn)입니다.
자바스크립트로 이진 탐색을 구현하는 방법은 반복문과 재귀 함수 두 가지가 있습니다.
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid; // 값이 발견되면 인덱스를 반환
} else if (arr[mid] < target) {
left = mid + 1; // 오른쪽 부분으로 이동
} else {
right = mid - 1; // 왼쪽 부분으로 이동
}
}
return -1; // 값을 찾지 못한 경우
}
// 예제
const arr = [1, 3, 5, 7, 9, 11];
console.log(binarySearch(arr, 7)); // 3
console.log(binarySearch(arr, 4)); // -1
function binarySearchRecursive(arr, target, left = 0, right = arr.length - 1) {
if (left > right) {
return -1; // 값을 찾지 못한 경우
}
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid; // 값이 발견되면 인덱스를 반환
} else if (arr[mid] < target) {
return binarySearchRecursive(arr, target, mid + 1, right); // 오른쪽 부분
} else {
return binarySearchRecursive(arr, target, left, mid - 1); // 왼쪽 부분
}
}
// 예제
const arr = [1, 3, 5, 7, 9, 11];
console.log(binarySearchRecursive(arr, 7)); // 3
console.log(binarySearchRecursive(arr, 4)); // -1