C语言库自带的二分查找函数bsearch函数的使用示例

bsearch

使用二分查找,查找一个被排序过的数组

依赖头文件
#include <stdlib.h>

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

描述

key : 指向要查找的元素
base : 指向被查找的数组
nmemb : 被查找数组的大小
size : 被查找数组元素的大小
int (*compar)(const void *, const void *) : 比对的函数

RETURN VALUE
查找到了就返回对应的元素,查找不到就返回NULL

   ┌──────────┬───────────────┬─────────┐
   │Interface │ Attribute     │ Value   │
   ├──────────┼───────────────┼─────────┤
   │bsearch() │ Thread safety │ MT-Safe │
   └──────────┴───────────────┴─────────┘

使用示例:

   #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);c
       }
       exit(EXIT_SUCCESS);
   }

扫码关注获取更多linux编程资源

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Achou.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值