bsearch函数解析

 

bsearch函数解析

From: http://blog.csdn.net/liuweikai1338/article/details/4492338
函数格式:

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

函数功能:

      将key在一系列base表示的数据中进行挨个比较,base中每个数据的大小是size,

       base中的数据总的个数是nmemb = sizeof(base)/sizeof(base[0]);

     compar 函数提供给用户的接口,对所需的内容进行比较。compar会返回一个值,表示比较的结果,如果返回0,bsearch函数立即返回,并且返回在base中找到的位置信息,如果到最后都没有找到,则返回null。

函数心得:

   该函数提供了复杂查找,减轻了我们在编程中经常遇到数据查找需要编写大量代码,同样会出现很多代码冗余, 效率不高的情况

函数示例:

     #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);
            }
            return 0;
       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值