알고리즘 개념
- 정렬이 되어있는 배열에서 데이터를 찾을 때, 원하는 탐색 범위를 두 부분으로 나눠 찾아간다.
- 중간 값과 비교해서 탐색 범위를 절반씩 줄여간다.
과정
- 정렬을 한다.
- left 값과 right 값의 중간값인 mid를 정한다.
- 찾고자 한 값과 mid와 비교후, mid보다 작으면 right = mid -1, mid보다 크면 left = mid + 1로 설정한다.
- left > right가 될 때까지 반복한다.
코드
int binarysearch(int key, int left, int right){
long long mid = (left + right) / 2;
if(left <= right){
if(key == arr[mid]) return 1;
else if(key < arr[mid]) return binarysearch(key, left, mid - 1);
else return binarysearch(key, mid + 1, right);
}
else return 0;
}
장점
- 전부 탐색하는 것보다 훨씬 빠르다.
단점
- 정렬이 된 상태에서 사용이 가능하다.
시간복잡도
- O(logN)
728x90
'Algorithm > 개념정리' 카테고리의 다른 글
에라토스테네스의 체(소수 찾기) C++ / 과정 / 시간복잡도 :: DANIDANI (0) | 2021.02.04 |
---|---|
힙정렬(Heap Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (2) | 2021.01.21 |
병합정렬(Merge Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (5) | 2021.01.19 |
퀵정렬(Quick Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (1) | 2021.01.18 |
삽입정렬(Insertion Sort) C++ / 장단점 / 시간복잡도 / 공간복잡도 :: DANIDANI (0) | 2021.01.16 |