알고리즘

[이코테/이진탐색/C++] 이진 탐색 알고리즘 (설명/시간복잡도/예시)

데메즈 2023. 1. 1. 13:27
728x90
반응형
  • 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법
  • 시간 복잡도 : O(logN)

binarySearch 함수에서 vector 함수를 가져오는 경우 꼭 & 를 써준다

#include <bits/stdc++.h>

using namespace std;

int n, target;
vector<int> arr;

int binarySearch(vector<int>& arr, int target, int start, int end){
    while(start <= end){
        int mid = (start + end)/2;
        // 찾은 경우 중간점 인덱스 반환
        if(arr[mid] == target) return mid;
        // 중간점의 값보다 찾고자하는 값이 작은 경우 왼쪽 확인
        else if(arr[mid] > target) end = mid - 1;
        // 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
        else start = mid + 1;
    }
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    // 원소의 개수(n)과 찾고자하는 값(target) 입력받기
    cin >> n >> target;
    // 전체 원소 입력 받기
    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        arr.push_back(x);
    }
    // 이진 탐색 수행 결과 출력
    int result = binarySearch(arr, target, 0, n-1);
    if(result == -1){
        cout << "원소가 존재하지 않습니다." << '\n';
    }
    else{
        cout << result + 1 << '\n';
    }

    return 0;
}

https://www.youtube.com/watch?v=94RC-DsGMLo&t=1369

728x90
반응형