다음을 통해 공유


bsearch

정렬된 배열의 이진 검색을 수행합니다. 이 함수의 더 안전한 버전을 사용할 수 있습니다. 를 참조하세요 bsearch_s.

구문

void *bsearch(
   const void *key,
   const void *base,
   size_t num,
   size_t width,
   int ( __cdecl *compare ) (const void *key, const void *datum)
);

매개 변수

key
검색할 키에 대한 포인터입니다.

base
검색 데이터의 기반에 대한 포인터입니다.

number
요소의 수입니다.

width
요소의 너비입니다.

compare
두 요소를 비교하는 콜백 함수입니다. 첫 번째는 검색 키에 대한 포인터이고, 두 번째는 키와 비교할 배열 요소에 대한 포인터입니다.

반환 값

bsearchkey 가 가리키는 배열의 base발생에 대한 포인터를 반환합니다. 찾을 수 없으면 key 함수가 반환됩니다 NULL. 배열이 오름차순 정렬 순서가 아니거나 동일한 키를 가진 중복 레코드를 포함하는 경우 결과를 예측할 수 없습니다.

설명

bsearch 함수는 각각 크기가 number 바이트인 width 요소의 정렬된 배열에 대해 이진 검색을 수행합니다. base 값은 검색할 배열 기준에 대한 포인터이고 key 는 검색되는 값입니다. compare 매개 변수는 요청된 키를 배열 요소와 비교하는 사용자가 제공한 루틴에 대한 포인터입니다. 관계를 지정하는 다음 값 중 하나를 반환합니다.

compare 루틴에서 반환된 값 설명
< 0 키가 배열 요소보다 작습니다.
0 키가 배열 요소와 같습니다.
> 0 키가 배열 요소보다 큽니다.

이 함수는 해당 매개 변수의 유효성을 검사합니다. 또는 key NULLnumber 0이 아닌 경우 comparenumber base NULL 또는 0이 아니면 width 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우 errnoEINVAL 로 설정되고 함수에서 NULL버전입니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.

요구 사항

루틴에서 반환된 값 필수 헤더
bsearch <stdlib.h> 및 <search.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

이 프로그램은 qsort를 사용하여 문자열 배열을 정렬한 다음 bsearch를 사용하여 "cat" 단어를 찾습니다.

// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( char **arg1, char **arg2 )
{
   /* Compare all of both strings: */
   return _strcmpi( *arg1, *arg2 );
}

int main( void )
{
   char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
   char **result;
   char *key = "cat";
   int i;

   /* Sort using Quicksort algorithm: */
   qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const
   void*, const void*))compare );

   for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i )    /* Output sorted list */
      printf( "%s ", arr[i] );

   /* Find the word "cat" using a binary search algorithm: */
   result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
                              sizeof( char * ), (int (*)(const void*, const void*))compare );
   if( result )
      printf( "\n%s found at %Fp\n", *result, result );
   else
      printf( "\nCat not found!\n" );
}
cat cow dog goat horse human pig rat
cat found at 002F0F04

참고 항목

검색 및 정렬
_lfind
_lsearch
qsort