bsearch / 이진탐색

Language/C 2011. 11. 9. 17:15

bsearch

 기능

 배열의 이진 탐색

 문법

 

 #include <stdlib.h>

 void *bsearch (const void *key, const void *base, size_t nelem, size_t width,

                       int (*fcmp)(const void*, const void*));

 

 프로토타입  stdlib.h 
 설명

 

 bsearch는 메모리내에서 nelem 원소들의 테이블(배열)을 탐색하고 테이블내에서 탐색키와 일치하는

 첫번째 요소(entry)의 어드레스를 리턴한다. 일치되는 것이 없을 때는 bsearch는 0을 리턴한다.

 형 size_t는 unsigned int로 정의된다.

 

    - nelem은 테이블에서 원소의 갯수를 준다.

    - width는 각 테이블 요소에서 바이트의 수를 지정한다.

 

 비교 루틴인 *fcmp는 두개의 인수 elem1과 elem2로 호출된다. 각 인수는 비교될 항목을 가리킨다.

 비교함수는 지적된 항목 (*elem1과 *elem2)을 비교하고 그 결과를 정수로 리턴한다.

 이 bsearch에서 *fcmp는 다음의 값을 리턴한다.

    <   0    만일 *elem1 < *elem2

    ==  0    만일 *elem1 == *elem2

    >   0    만일 *elem1 > *elem2

 

 전형적으로 elem1은 인수 key이고 elem2는 탐색될 테이블 내에서의 원소에 대한 포인터이다.

 

 리턴값

 bsearch는 탐색 key와 일치하는 테이블 내의 첫번째 요소의 어드레스를 리턴한다.

 이식성  UNIX 시스템상에서 사용하여 ANSI C와 호환성이 있다.
 참조  lfind, lsearch, qscrt
 예제

 

 #include <stdio.h>
 #include <stdlib.h>

 

 #define NELEMS(arr)  (sizeof(arr)  / sizeof(arr[0]))

 

 int numarray[] = {123, 145, 512, 627, 800, 993};

 

 int numeric(const void *p1, const void *p2)
 {
     return (*(int*)p1 - *(int*)p2);
 }

 

 /* Return 1 if key is in the table, 0 if not */
 int lookup(int key)
 {
     int *itemptr;

 

     /* bsearch() returns a pointer to the
         item that is found */
     itemptr = (int*)bsearch(&key, numarray, NELEMS(numarray), sizeof(int), numeric);
 
     return (itemptr != NULL);
 }

 

 int main()
 {
     printf("Is 512 in table? ");
     printf("%s\n", lookup(512) ? "YES" : "NO");

 

     return 0;
 }

 

 프로그램 출력

 

 Is 512 in table? YES

 

 

 

'Language > C' 카테고리의 다른 글

fopen, open 차이  (0) 2011.11.18
파일 퍼미션  (0) 2011.11.14
stat  (0) 2011.11.08
배열 크기 구하기  (0) 2011.11.08
exec 함수군  (0) 2011.11.07
: