본문 바로가기
C

이진탐색

by stdlib.h 2016. 3. 28.

이진탐색이란 절반씩 나누어 검색하는 분할탐색 알고리즘을 말한다.


순차탐색보다 빠르며, 이진탐색을 하기 위해서는, 오름차순이나 내림차순으로 정렬된 배열이 필요하다.


이를 간단한 예제로 구현하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
int main(void)
{
    int key;
    int low=0, high, mid;
    int arr[10= { 12345678910};
    scanf("%d", &key);
    high = sizeof(arr) / 4;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (key < arr[mid])
        {
            high = mid - 1;
        }
        else if (key > arr[mid])
        {
            low = mid + 1;
        }
        else
        {
            printf("%d번째\n", mid+1);
            break;
        }
    }
 
}
 
 
 
cs



탐색 순서는 다음과 같다.

1.

반복문에서 처리하며, 탐색범위의 끝인 high 가 범위의 처음인 low 보다 작다면 찾는 데이터가

 없는것으로 간주하고 반복문을 종료한다.

2.

mid 는 배열의 중앙값을 나타내는것으로써, 탐색범위의 처음인 low 와 끝인 high 을

 더하여 2로 나눈값이다.

3.

배열의 중앙값과 찾는데이터값을 비교하여, 찾는데이터값 > 중앙값 이라면, 탐색범위의 처음인 low 가 mid+1 로 탐색 범위를 줄이고,

그 반대라면 탐색범위의 끝인 high 가 mid-1로 범위를 줄인다.

첫번째도, 두번째도 아니라면, 값이 같은걸로 간주하고 그 값이 있는 위치를 반환한다.

4.

그 값이 있는 위치를 반환하지 않았다면, 3의 바뀐 low, high, mid 를 가지고 반복한다.


'C' 카테고리의 다른 글

함수  (0) 2016.03.28
2차원배열  (0) 2016.03.28
선택정렬 & 버블정렬  (0) 2016.03.28
문자열  (0) 2016.03.28
과제  (0) 2016.03.28