이진 탐색 알고리즘은 중간 값과 찾고자하는 값의 비교가 이루어질때마다 탐색 범위가 1/2로 줄어든다.
정렬된 데이터의 크기를 n으로, 비교 횟수를 k라고 정의하자.
n * (2/1)^k = 1
n = 2^k
k = log n
즉, n크기의 데이터에 대한 이진탐색 알고리즘의 시간복잡도는 다음과 같다.
T(n) = θ(log n)
int binary_search(int* data_arr, int target) {
int left = 0, right = SIZE - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (data_arr[mid] == target) return mid;
else if (data_arr[mid] > target) right = mid - 1;
else left = mid + 1;
}
return -1;
}
문제 번호 | 정답률 | 출처 | 난이도(5) | 전체 코드 | 문제 풀이 |
---|---|---|---|---|---|
1920 : 수 찾기 | 28.032% | 1 | 1920.cpp | X | |
2110 : 공유기 | 48.796% | 2 | 2110.cpp | O | |
2805 : 나무 자르기 | 25.503% | COCI | 1 | 2805.cpp | X |
2512 : 예산 | 31.284% | Olympiad | 2 | 2512.cpp | X |
2343 : 기타 레슨 | 28.797% | 2 | 2343.cpp | X | |
3691 : 컴퓨터 조립 | 47.945% | ICPC |