bsearch / 이진탐색
Language/C 2011. 11. 9. 17:15bsearch
기능 | 배열의 이진 탐색 |
문법 |
#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>
#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 1 if key is in the table, 0 if not */
/* bsearch() returns a pointer to the
int main()
return 0;
프로그램 출력
Is 512 in table? YES
|