본문 바로가기
C++ STL, 알고리즘

이진탐색

by wanna_dev 2023. 10. 4.

단순 순회 알고리즘으로, 풀수 없는 백준 문제가 생겨나서 이진탐색 알고리즘을 복습하게 되었습니다.

(1654번)

 

이진탐색 이란?

- 정렬된 배열에서 검색 범위를 줄여 나가면서 검색 값을 찾는 알고리즘.

 

시간 복잡도

- O(logN)

 

 

정렬된 배열의 중간값을 임의로 선택하여 찾고자 하는 키(key) 값과 비교하는 탐색 알고리즘.

 

중앙값을 기준으로 왼쪽 오른쪽 탐색을 달리한다.

 

반복, 재귀, STL 이용하여 구현가능

 

//반복문을 이용한 이진탐색을 이용하여 탐색
bool BinarySearch(int *arr, int len, int key){
    int start = 0;
    int end = len-1;
    int mid; 
 
    while(end - start >= 0) {
        mid = (start + end) / 2;    //중앙 값
 
        if (arr[mid] == key) {    //key값을 찾았을때
            return true;
 
        } else if (arr[mid] > key) {   //key값이 mid의 값보다 작을때 (왼쪽으로)
            end = mid - 1;
 
        } else {  //key값이 mid의 값보다 클때 (오른쪽으로)
            start = mid + 1;
 
        }
    }
    return false;
}

 

 

//재귀를 이용한 이진탐색을 이용하여 탐색
bool BinarySearch(int *arr, int start, int end, int key) {
 
    if (start > end) return false; //key 값이 없을 때
 
    int mid = (start + end) / 2;
 
    if (arr[mid] == key) {    //key 값을 찾았을 때
        return true;
        
    } else if (arr[mid] > key) { //key 값이 mid 의 값보다 작을때(왼쪽으로)
        return BinarySearch(arr, start, mid - 1, key);
        
    } else {  //key 값이 mid 의 값보다 작을때(왼쪽으로)
        return BinarySearch(arr, mid + 1, end, key);
        
    }
}

 

#include<iostream>
#include<algorithm>
using namespace std;
 
//STL를 이용한 이진탐색을 이용하여 탐색
int main(void){
    int n= 100;
    int arr[n];
 
    for(int i=0; i<n; i++){
        arr[i] = i;
    }
 
    cout << "exist : " << binary_search(arr, arr+n, 70) << endl;
    
    return 0;
}

(출처)https://blo ckdmask.tistory.com/167

 

 

[탐색] 이진탐색 (Binary Search) 구현 방법

안녕하세요. BlockDMask 입니다. 알고리즘 코딩 사이트(백준 온라인 저지)에서 '수 찾기' 문제를 풀다가 이진탐색(Binary Search)이 나와서, 이번 기회에 정리를 해볼까 합니다. 1. 이진탐색(Binary Search)

blockdmask.tistory.com

 

 

 

 

[탐색] 이진탐색 (Binary Search) 구현 방법

안녕하세요. BlockDMask 입니다. 알고리즘 코딩 사이트(백준 온라인 저지)에서 '수 찾기' 문제를 풀다가 이진탐색(Binary Search)이 나와서, 이번 기회에 정리를 해볼까 합니다. 1. 이진탐색(Binary Search)

blockdmask.tistory.com

 

 

[탐색] 이진탐색 (Binary Search) 구현 방법

안녕하세요. BlockDMask 입니다. 알고리즘 코딩 사이트(백준 온라인 저지)에서 '수 찾기' 문제를 풀다가 이진탐색(Binary Search)이 나와서, 이번 기회에 정리를 해볼까 합니다. 1. 이진탐색(Binary Search)

blockdmask.tistory.com

를 참고하였습니다.

 

 

 

 

 

'C++ STL, 알고리즘' 카테고리의 다른 글

BFS, DFS c++  (0) 2023.10.23
c++ lower_bound upper_bound  (0) 2023.10.13
float vs double c++ 부동소수점 문제  (0) 2023.10.12
C++ 입출력 가속 코드  (1) 2023.10.06
[STL] vector unique 함수  (0) 2023.10.05