bsearch

执行了排序数组的二进制搜索。 此功能的一种较为安全的版本可用; bsearch_s参见。

void *bsearch( 
   const void *key,
   const void *base,
   size_t num,
   size_t width,
   int ( __cdecl *compare ) (const void *key, const void *datum) 
);

参数

  • key
    搜索的对象。

  • base
    要搜索的基础数据的指针。

  • num
    元素的数目。

  • width
    元素的宽度。

  • compare
    比较两个元素的回调函数。 第一个是指向搜索的键,第二是指向数组元素与密钥进行比较。

返回值

bsearch 返回指向 key 出现在数组的指向由 base。 如果找不到 key ,则函数返回 NULL。 如果数组不按升序顺序或包含重复具有相同的密钥的记录,结果是不可预知的。

备注

bsearch 功能的大小执行排序的一些 num 元素,每个的二进制搜索 width 字节。 base 值是指向要搜索的数组的基础,并且, key 所查找的值。 compare 参数是指向与数组元素比较请求的键并返回指定它们之间的关系以下值之一的用户提供的实例:

值返回 compare 实例

说明

< 0

键比数组元素小于。

0

键与数组元素相等。

> 0

键比数组元素大。

此功能验证其参数。 如果 compare、 key 或 num 是 NULL,或者,如果 base 是 NULL 和 " *num 不为零,或者,如果 width 为零,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续, errno 设置为 EINVAL ,函数返回 NULL。

要求

实例

必需的头

bsearch

stdlib.h 和 search.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

此过程与排序 qsort 的字符串数组,然后使用 bsearch 查找单词 “猫”。

// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( char **arg1, char **arg2 )
{
   /* Compare all of both strings: */
   return _strcmpi( *arg1, *arg2 );
}

int main( void )
{
   char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
   char **result;
   char *key = "cat";
   int i;

   /* Sort using Quicksort algorithm: */
   qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const 
   void*, const void*))compare );

   for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i )    /* Output sorted list */
      printf( "%s ", arr[i] );

   /* Find the word "cat" using a binary search algorithm: */
   result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
                              sizeof( char * ), (int (*)(const void*, const void*))compare );
   if( result )
      printf( "\n%s found at %Fp\n", *result, result );
   else
      printf( "\nCat not found!\n" );
}
  

.NET Framework 等效项

系统:: 集合:: ArrayList:: BinarySearch

请参见

参考

搜索和排序

_lfind

_lsearch

qsort