bsearch

bsearch 搜索数组

示例如下:

 1        #include <stdio.h>
 2        #include <stdlib.h>
 3        #include <string.h>
 4 
 5        struct mi {
 6            int nr;
 7            char *name;
 8        } months[] = {
 9            { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
10            { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
11            { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
12        };
13 
14        #define nr_of_months (sizeof(months)/sizeof(months[0]))
15 
16        static int
17        compmi(const void *m1, const void *m2)
18        {
19            struct mi *mi1 = (struct mi *) m1;
20            struct mi *mi2 = (struct mi *) m2;
21            return strcmp(mi1->name, mi2->name);
22        }
23 
24        int
25        main(int argc, char **argv)
26        {
27            int i;
28 
29            qsort(months, nr_of_months, sizeof(struct mi), compmi);
30            for (i = 1; i < argc; i++) {
31                struct mi key, *res;
32                key.name = argv[i];
33                res = bsearch(&key, months, nr_of_months,
34                              sizeof(struct mi), compmi);
35                if (res == NULL)
36                    printf("'%s': unknown month\n", argv[i]);
37                else
38                    printf("%s: month #%d\n", res->name, res->nr);
39            }
40            exit(EXIT_SUCCESS);
41        }

(备注:示例代码来自 Linux 的 bsearch 在线帮助文档)

转载于:https://www.cnblogs.com/YBhello/p/5213083.html

`bsearch()`是C标准库提供的一个用于二分查找的函数,适用于已经按照特定顺序排列的数组(通常是升序)。其原型在`cstdlib`头文件中定义如下: ```c void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); ``` `bsearch()`函数的主要参数如下: - `key`: 要查找的目标元素,可以是一个指向目标值的指针。 - `base`: 已经排序的数组的第一个元素的指针。 - `nmemb`: 数组中的元素个数。 - `size`: 每个数组元素的大小,单位通常是字节。 - `compar`: 一个指向比较函数的指针,该函数接受两个指向数组元素的指针作为参数,返回一个整数值。如果第一个元素小于第二个,返回负数;相等则返回零;大于则返回正数。 使用步骤如下: 1. 定义一个比较函数(如上面代码中的`cmp()`),它通常采用`<`运算符或自定义逻辑来进行元素间的比较。 2. 准备好已排序的数组和待查找的元素。 3. 调用`bsearch()`,将关键参数传入,函数会在数组中查找指定的元素,并返回找到元素的指针,如果没有找到,则返回`NULL`。 下面是一个简单的示例: ```c int my_array[] = {1, 3, 4, 5, 6, 8, 9, 11}; int target = 6; int index = bsearch(&target, my_array, sizeof(my_array) / sizeof(my_array[0]), sizeof(int), compare); if (index != NULL) { printf("Found at position %zu\n", index); } else { printf("Element not found in the array.\n"); } ``` 在这个例子中,`compare`函数可能会是这样的: ```c int compare(const void* a, const void* b) { return (*(int*)a - *(int*)b); } ``` 注意:`bsearch()`适用于静态数组,对于动态数组或链表,可能需要自己实现类似的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值