728x90
이진 탐색(Binary Search)은 정렬된 배열에서 특정 값을 찾는 효율적인 알고리즘입니다.
이진 탐색은 탐색 범위를 절반으로 줄여가며 값을 찾기 때문에 시간 복잡도가 O(log n)입니다.
원리
- 초기화
배열의 시작 인덱스('low')와 끝 인덱스('high')를 설정합니다. - 중간값 계산
중간 인덱스('mid')를 계산합니다. - 비교 및 이동
- 중간값이 찾고자 하는 값과 같다면 탐색을 종료합니다.
- 중간값이 찾고자 하는 값보다 크다면 'high'를 'mid - 1'로 설정합니다.
- 중간값이 찾고자 하는 값보다 작다면 'low'를 'mid + 1'로 설정합니다.
- 반복
값을 찾거나 탐색 범위가 사라질 때까지 2번과 3번 단계를 반복합니다.
#include <iostream>
int binarySearch(int arr[], int size, int target) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
// 중간값이 찾고자 하는 값과 같은지 확인
if (arr[mid] == target) {
return mid; // 값을 찾음
}
// 중간값이 더 큰 경우, 왼쪽 절반 탐색
else if (arr[mid] > target) {
high = mid - 1;
}
// 중간값이 더 작은 경우, 오른쪽 절반 탐색
else {
low = mid + 1;
}
}
return -1; // 값을 찾지 못함
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 10;
int result = binarySearch(arr, size, target);
if (result != -1) {
cout << "값 " << target << "은(는) 인덱스 " << result << "에 있습니다." << endl;
} else {
cout << "값 " << target << "을(를) 배열에서 찾을 수 없습니다." << endl;
}
return 0;
}
- 배열 초기화
'int arr[] = {2, 3, 4, 10, 40};' 배열이 오름차순으로 정렬되어 있어야 합니다. - 배열 크기 계산
'int size = sizeof(arr) / sizeof(arr[0]);' 배열의 크기를 계산합니다. - 탐색할 값 설정
'int target = 10;' 찾고자 하는 값을 설정합니다. - 이진 탐색 호출
'int result = binarySearch(arr, size, target);' 이진 탐색 함수 호출로 결과를 받습니다. - 결과 출력
결과에 따라 값이 발견된 인덱스를 출력하거나 값이 없음을 출력합니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
728x90
반응형
'Application > 기초' 카테고리의 다른 글
[기초] C++ 넓이 우선 탐색 (Breadth-First Search, BFS) (0) | 2024.05.20 |
---|---|
[기초] C++ 깊이 우선 탐색 (Depth-First Search, DFS) (0) | 2024.05.18 |
[기초] C++ 선형 탐색 (Linear Search) (0) | 2024.05.16 |
[기초] C++ Linked List : 원형 이중 연결 리스트 (0) | 2024.05.15 |
[기초] C++ Linked List : 원형 연결 리스트 (0) | 2024.05.14 |