Application/기초

[기초] C++ 이진 탐색 (Binary Search)

devsalix 2024. 5. 17. 09:25
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
반응형