이진 탐색은 정렬된 배열에서 원하는 값을 빠르게 찾는 탐색 알고리즘이다. 이 알고리즘은 탐색 범위를 매 단계마다 절반으로 줄여 효율적으로 값을 얻는다.
int search_binary(int key, int low, int high) {
int mid;
if(low <= high) {
mid = (low + high) / 2;
if(key == list[mid])
return mid; // 탐색 성공
else if(key < list[mid]) // 왼쪽 부분리스트 탐색
return search_binary(key, low, mid - 1);
else if(key > list[mid]) // 오른쪽 부분리스트 탐색
return search_binary(key, mid + 1, high);
}
return -1; // 탐색 실패
}
int search_binary2(int key, int low, int high) {
int mid;
while(low <= high) {
mid = (low + high) / 2;
if(key == list[mid]) return mid;
else if(key < list[mid])
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
이진 탐색은 매 단계마다 탐색 범위를 절반으로 줄이기 때문에, 시간 복잡도는 다음과 같이 계산된다.
출처
C언어로 쉽게 풀어쓴 자료구조 - 천인구