선형 탐색

  • 데이터 전체를 순서대로 순회하면서 탐색한다.
  • 시간복잡도 O(N)

이분 탐색

  • 😯 정렬된 data에 대해서만 사용 가능하다.
  • 시간복잡도 O(logN)
  • 매번 탐색 범위가 1/2배가 된다.
  • 탐색을 여러 번 해야 할 때 효율적이다.(😯정렬을 할 가치가 있으므로)

이분 탐색 구현(C++)

1. 함수를 이용한 경우

#include <iostream>
#include <vector>
using namespace std;

vector<int> v = {1,3,5,7,11,18,21,33,43,45};

int search(int tar, int l, int r) {
    if(l>r) return -1;

    int mid = (l+r)/2;
    if(v[mid]==tar) return mid;
    if(v[mid]<tar) return search(tar, mid+1, r);
    if(v[mid]>tar) return search(tar, l, mid-1);    
}

int main() {
    int target, len=10;
    
    cin >> target;
    cout << search(target, 1, len-1);
}

2. 반복문을 이용한 경우

#include <iostream>
#include <vector>
using namespace std;

vector<int> v = {1,3,5,7,11,18,21,33,43,45};

int main() {
    int target, len=10;
    int l=1, r=len-1;
    cin >> target;
    
    while(l<=r) {
        int mid = (l+r)/2;
        if(v[mid]==target) {
            cout << mid;
            return 0;
        }
        if(v[mid]>target) r = mid-1;
        else if(v[mid]<target) l = mid+1;
    }
    cout << -1;
}