📜  C++ bsearch()(1)

📅  最后修改于: 2023-12-03 14:59:44.613000             🧑  作者: Mango

C++ bsearch()

概述

bsearch()函数是C++标准库中的一个函数,可以在有序数组中进行二分查找。它用于在数组中查找特定的值,并返回一个指向找到的元素的指针。bsearch()函数是一个非常高效的查找算法,因为它利用了有序数组的特性,将搜索范围缩小到一半。

使用方法
void* bsearch(const void* key, const void* base, size_t num, size_t size,
              int (*compar)(const void*, const void*));

参数说明:

  • key: 要查找的值
  • base: 数组的起始地址
  • num: 数组中元素的个数
  • size: 数组中每个元素的大小(以字节为单位)
  • compar: 用于比较两个元素的函数指针

返回值:

  • 如果找到了指定的值,返回指向该值的指针
  • 如果未找到指定的值,返回NULL
示例代码

下面是一个使用bsearch()函数查找整数的示例代码:

#include <iostream>
#include <cstdlib>

int compare(const void* a, const void* b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    int key = 12;
    int* result = (int*)bsearch(&key, arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compare);

    if (result != NULL) {
        std::cout << "Found key at index: " << (result - arr) << std::endl;
    } else {
        std::cout << "Key not found" << std::endl;
    }

    return 0;
}

解释代码:

  1. 包含必要的头文件<iostream><cstdlib>
  2. 创建一个要查找的整数数组arr和一个要查找的整数key
  3. 定义一个比较函数compare(),用于比较两个整数。
  4. main()函数中,调用bsearch()函数进行查找。传递给bsearch()函数的参数为:要查找的值&key,数组的起始地址arr,数组中的元素个数sizeof(arr) / sizeof(arr[0]),每个元素的大小sizeof(arr[0]),以及比较函数compare
  5. 检查bsearch()的返回值,如果指针不为空,则说明找到了指定的值。输出找到的值在数组中的索引result - arr。如果指针为空,则说明未找到指定的值。
注意事项
  • 数组必须是有序的才能使用bsearch()函数进行查找。
  • 传递给bsearch()函数的比较函数必须满足以下要求:
    • 如果第一个参数小于第二个参数,则返回一个负整数。
    • 如果第一个参数等于第二个参数,则返回零。
    • 如果第一个参数大于第二个参数,则返回一个正整数。
  • bsearch()函数返回的指针类型为void*,需要进行类型转换才能得到所需的指针类型。

更多关于bsearch()函数的详细信息,请参阅C++ reference