1. 개념

이미 정렬된 자료에 대한 검색 알고리즘. 파일을 이분화하면서 검색 대상이 되는 키 값과 중간 위치의 값을 비교하면서 검색하는 방법.

앞에서부터 하나하나 검색하는 순차 검색보다 보다 효율성이 높다.

한번 비교할때마다 검색의 범위가 반으로 줄어드므로 수행 복잡도는 최소 O(log^n)


2. 과정

① 정렬된 데이터에서 첫 번재 위치를 left, 마지막 위치를 right로 설정

② middle 값을 구한다. (middle = (left + right) / 2)

③ middle 값이 찾고자 하는 데이터이면 검색을 종료.

   찾고자 하는 데이터가 아닐떄,

   1) 찾고자 하는 값 > middle 값일때

   left = middle+1로 재설정 후 2~3번의 과정 반복

   2) 찾고자 하는 값 < middle 값일때

   right = middle-1로 재설정 후 2~3번의 과정 반복

④ left>right이 되면 검색 종료(찾고자 하는 데이터 값이 없음)


3. Code

#include <stdio.h> int binary_search(int a[], int n, int key) { int left, right, middle; left = 0; right = n-1; while(!(left>right)) { middle = (left+right)/2; if(key>a[middle]) left = middle+1; else if(key<a[middle]) right = middle-1; else return middle; } return -1; } int main() { int i, key, find, count; int array[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; count = sizeof(array)/sizeof(int); printf("array[] 데이터 : "); for(i=0;i<count;i++) { printf("%d\t", array[i]); } printf("\n"); printf("찾고자 하는 데이터를 입력해주세요 : "); scanf("%d", &key); find = binary_search(array, count, key); if(find > -1) printf("array[%d] = %d", find, array[find]); else printf("값이 존재하지 않습니다.\n"); }


'Algorithm > 개념' 카테고리의 다른 글

이진 검색 트리(Binary Search Tree)  (0) 2018.03.22
보간 검색(Interpolation Search)  (0) 2018.03.22
알고리즘 풀이 종류 정리  (0) 2018.02.23
정렬(Sort)  (0) 2018.02.07

+ Recent posts