bsearch(3)

이름
bsearch - 정렬된 배열의 이진 탐색

라이브러리
표준 C 라이브러리 (libc, -lc)

요약
#include <stdlib.h>

void *bsearch(const void key[.size], const void base[.size * .nmemb],
              size_t nmemb, size_t size,
              int (*compar)(const void [.size], const void [.size]));

설명
bsearch() 함수는 nmemb 오브젝트의 어레이를 찾는다, 그것의 최초 구성은 key로 지정된 오브젝트에 해당하는 구성으로, base에 의해 지정된다. 각 어레이 구성의 크기는 size로 지정된다.

어레이의 내용은 compar와 관련된 비교 기능을 이용하여 상방정렬 되어야한다. compar 루틴은 key를 지정하는 것과 어레이의 구성을 지정하는 두개의 변수를 가진다. 그리고 이것은key오브젝트가 찾아지면 0보다 작거나 큰 정수를 반환해야 한다.

반환값
bsearch() 함수는 어레이에서 맞는 구성 요소를 잦아 그 포인터를 반환한다. 만약 맞는게 없다면 널을 반환한다. 키에 해당하는 구성요소가 여러 개 있다면, 반환되는 요소는 특별히 지정되지 않는다.

속성
이 섹션에서 사용되는 용어에 대한 설명은 attributes(7)을 참조하십시오.
상호 작용 | 속성 | 번호
bsearch() | Thread safety | MT-Safe

표준
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.

폐제
The example below first sorts an array of structures using qsort(3), then retrieves desired elements using bsearch().

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

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

    struct mi {
        int         nr;
        const char  *name;
    };

    static struct mi  months[] = {
        { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
        { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
        { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
    };

    static int
    compmi(const void *m1, const void *m2)
    {
        const struct mi *mi1 = m1;
        const struct mi *mi2 = m2;

        return strcmp(mi1->name, mi2->name);
    }

    int
    main(int argc, char *argv[])
    {
        qsort(months, ARRAY_SIZE(months), sizeof(months[0]), compmi);
        for (size_t i = 1; i < argc; i++) {
            struct mi key;
            struct mi *res;

            key.name = argv[i];
            res = bsearch(&key, months, ARRAY_SIZE(months),
                          sizeof(months[0]), compmi);
            if (res == NULL)
                printf("'%s': unknown month\n", argv[i]);
            else
                printf("%s: month #%d\n", res->name, res->nr);
        }
        exit(EXIT_SUCCESS);
    }

추가 참조
hsearch(3), lsearch(3), qsort(3), tsearch(3)

번역
이 매뉴얼 페이지의 한국어 번역은 다음에 의해 편집되었습니다: ASPLINUX <man@asp-linux.co.kr>

이 번역은 무료 문서입니다. 저작권 조건에 대해서는 GNU General Public License 버전 3 (https://www.gnu.org/licenses/gpl-3.0.html) 이상을 읽으십시오. 책임이 없습니다.

이 매뉴얼 페이지의 번역에서 오류를 발견하면 translation-team-ko@googlegroups.com 로 이메일을 보내주십시오.