bsearch

Autres langues

Langue: ja

Autres versions - même langue

Version: 2003-11-01 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

bsearch - ¥½¡¼¥È¤µ¤ì¤¿ÇÛÎó¤òÆóʬÌÚ¸¡º÷ (binary search) ¤¹¤ë

½ñ¼°


#include <stdlib.h>



void *bsearch(const void *key, const void *base, size_t nmemb,

size_t size, int (*compar)(const void *, const void *));


ÀâÌÀ

bsearch() ´Ø¿ô¤Ï nmemb ¸Ä¤Î¥ª¥Ö¥¸¥§¥¯¥È¤«¤é¤Ê¤ëÇÛÎó¤ò¸¡º÷ ¤¹¤ë¡£ÇÛÎó¤ÎºÇ½é¤Î¥á¥ó¥Ð¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï base ¤Ë¤è¤Ã¤ÆÍ¿¤¨¤ë¡£ ¥Ý¥¤¥ó¥¿ key ¤Ç»²¾È¤µ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤È°ìÃפ¹¤ë¥á¥ó¥Ð¡¼¤¬ÊÖ¤µ¤ì¤ë¡£ ÇÛÎóÃæ¤Î³Æ¡¹¤Î¥á¥ó¥Ð¡¼¤Î¥µ¥¤¥º¤Ï size ¤Ë¤è¤Ã¤Æ»ØÄꤹ¤ë¡£

ÇÛÎó¤ÎÆâÍƤÏÈæ³Ó´Ø¿ô compar ¤Ë´ð¤Å¤­¡¢¾º½ç¤Ë¥½¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤±¤ì ¤Ð¤Ê¤é¤Ê¤¤¡£ compar ¥ë¡¼¥Á¥ó¤ÏÆó¤Ä¤Î°ú¿ô¤ò¼è¤ë´Ø¿ô¤Ç¡¢°ì¤Ä ÌÜ¤Ë key ¤Ø¤Î¥Ý¥¤¥ó¥¿¡¢¼¡¤ËÇÛÎó¤Î¥á¥ó¥Ð¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò¼è¤ë¡£ ¤³¤Î½ç¤Ë»ØÄꤷ¤¿¤È¤­¡¢ key ¤¬ÇÛÎó¥á¥ó¥Ð¡¼¤è¤ê¾®¤µ¤¤¤È¤­¤Ë¤Ï Éé¤ÎÀ°¿ô¤ò¡¢Â礭¤¤¤È¤­¤Ë¤ÏÀµ¤ÎÀ°¿ô¤ò¡¢°ìÃפ·¤¿¤È¤­¤Ë¤Ï 0 ¤ò¡¢¤½¤ì¤¾¤ì compar ¤ÏÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

ÊÖ¤êÃÍ

bsearch() ´Ø¿ô¤Ï¡¢ÇÛÎó¤Î¥á¥ó¥Ð¡¼¤Î¤¦¤Á¡¢°ìÃפ·¤¿¤â¤Î¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò ÊÖ¤¹¡£¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ï NULL ¤òÊÖ¤¹¡£ key ¤È°ìÃפ·¤¿¥á¥ó¥Ð¡¼¤¬ Ê£¿ô¤¢¤ë¤È¤­¡¢¤½¤Î¤¦¤Á¤Î¤É¤Î¥á¥ó¥Ð¡¼¤¬ÊÖ¤µ¤ì¤ë¤«¤Ï¤ï¤«¤é¤Ê¤¤¡£

½àµò

SVr4, 4.3BSD, POSIX.1-2001, C89, C99

Îã

°Ê²¼¤ÎÎã¤Ï¡¢ qsort(3) ¤ò»È¤Ã¤Æ¹½Â¤ÂΤÎÇÛÎó¤ÎʤӴ¹¤¨¤ò¹Ô¤Ã¤¿¸å¡¢ ½ê˾¤ÎÍ×ÁǤò bsearch() ¤ò»È¤Ã¤Æ¼èÆÀ¤¹¤ë¤â¤Î¤Ç¤¢¤ë¡£

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



struct mi {

    int nr;

    char *name;

} 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" }

};



#define nr_of_months (sizeof(months)/sizeof(months[0]))



static int

compmi(const void *m1, const void *m2)

{

    struct mi *mi1 = (struct mi *) m1;

    struct mi *mi2 = (struct mi *) m2;

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

}



int

main(int argc, char **argv)

{

    int i;



    qsort(months, nr_of_months, sizeof(struct mi), compmi);

    for (i = 1; i < argc; i++) {

        struct mi key, *res;

        key.name = argv[i];

        res = bsearch(&key, months, nr_of_months,

                      sizeof(struct mi), 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)