执行一个排序数组的二进制搜索。 提供该函数的一个更安全版本;请参阅 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
比较两元素的回调函数。 第一是指向将要搜索的键,而第二个 byte 是指向数组元素。关键字进行比较。
返回值
bsearch 返回指向key 数组中出现的 base。 如果不存在 key,则函数返回 NULL。 如果数组不按升序排序顺序或者不包含带相同键的复制记录,结果是不可预知的。
备注
bsearch 函数在数组大小执行顺序的 num 元素,每一个二进制搜索 width 字节。 base值是指向将要搜索数组的基,key 是查找的值。 compare 参数是指向比较请求的键处到数组并返回指定元素及其关系的下列值之一的用户提供的例程:
compare 例程将返回的值 |
说明 |
---|---|
< 0 |
键小于数组元素。 |
0 |
键与数组元素相等。 |
> 0 |
键大于数组元素。 |
此函数验证其参数。 如果 compare, key 或 num 是 NULL, 或者如果 base 是 NULL 和 *num 为非零, 或如果 width 为0, 无效参数处理程序将被调用,如参数验证所述。 如果允许执行继续,errno设置为EINVAL,并且函数返回NULL。
要求
例程 |
必需的标头 |
---|---|
bsearch |
<stdlib.h> and <search.h> |
有关其他兼容性信息,请参见“简介”中的兼容性。
示例
此应用程序使用的字符串数组进行快速排序,然后使用二分查找单词“猫”。
// 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 等效项
System::Collections::ArrayList::BinarySearch