- 이진 탐색(Binary Search) 개념
배열 및 리스트를 반으로 나누어 탐색 범위를 줄여나가는 식으로 동작하는 알고리즘
대용량의 데이터 처리에 효과적
이진탐색을 구현하기 위한 배열 및 리스트는 반드시 정렬 되어 있어야 함.
이진탐색 구현법
정렬된 배열, start 인덱스, end 인덱스
배열을 반으로 나누었을때 경우의 수 3가지
- 중간 값이 찾고자하는 값과 같을때 - 검색성공을 return
- 중간 값이 찾고자하는 값보다 작을때 - 반으로 나눈 왼쪽 요소를 이진탐색
- 중간 값이 찾고자하는 값보다 클때 - 반으로 나눈 오른쪽 요소를 이진탐색
복잡도
O(log n)
이진 검색 알고리즘 풀이
function binarySearch(states, target) {
let left = 0;
let right = states.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
// 중간 요소와 타겟을 비교
if (states[mid] === target) {
return mid; // 찾았을 때의 인덱스 반환
}
// 중간 요소가 타겟보다 작으면 오른쪽 반 탐색
if (states[mid] < target) {
left = mid + 1;
}
// 중간 요소가 타겟보다 크면 왼쪽 반 탐색
else {
right = mid - 1;
}
}
return -1; // 찾지 못한 경우 -1 반환
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘][JS] 검색 알고리즘이란? (0) | 2023.10.17 |
---|---|
[백준][JS] 피보나치 수 5 (0) | 2023.10.13 |
[알고리즘][JS] 재귀 함수 (0) | 2023.10.13 |
[알고리즘][JS] 분할과 정복 알고리즘 (0) | 2023.10.11 |
[알고리즘][JS] 다중 포인터 패턴 (0) | 2023.10.11 |