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 傳回指向由 base 指向的陣列中找到 key 的指標 如果 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 尋找文字「Cat」。
// 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