當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ bsearch()用法及代碼示例


C++ 中的bsearch() 函數對元素數組中的元素執行二進製搜索,如果找到,則返回指向該元素的指針。

bsearch() 函數要求數組中小於要搜索的元素左側的所有元素。

同樣,所有大於要搜索的元素的元素都必須在數組中它的右側。如果數組按升序排序,則滿足此要求。

bsearch()原型

void* bsearch (const void* key, const void* base, size_t num, size_t size, int (*compare)(const void*,const void*));

該函數在<cstdlib> 頭文件中定義。

bsearch() 函數在數組 base 中搜索 key 。小於 key 的所有元素必須出現在數組 base 的前麵。同樣,所有大於 key 的元素都必須出現在 base 中。

為了執行搜索,bsearch() 函數對compare 指向的函數進行一係列調用,其中key 作為第一個參數,數組中的一個元素作為第二個參數。

參數:

  • key:指向要搜索的元素的指針
  • base : 指向數組第一個元素的指針
  • num : 數組中的元素數
  • size:數組中每個元素的大小(以字節為單位)
  • compare:指向比較兩個元素的函數的指針。它返回
    • 如果第一個參數小於第二個參數,則為負整數
    • 如果第一個參數大於第二個參數,則為正整數
    • 如果兩個參數相等則為零

key 作為第一個參數傳遞,數組中的一個元素作為第二個參數傳遞。比較函數的原型如下:

int compare(const void* a, const void* b);

返回:

bsearch() 函數返回:

  • 指向找到的元素的指針。如果找到多個匹配元素,則未指定函數將返回哪個元素的地址作為結果。
  • 如果未找到元素,則為空指針。

示例 1:bsearch() 函數如何工作?

#include <iostream>
#include <cstdlib>
using namespace std;

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

int main()
{
	const int num = 10;
	int arr[num] = {5,9,10,14,16,19,21,26,29,31};
	int key1 = 10;
	int *p1 = (int*)bsearch(&key1,arr,num,sizeof(int),compare);

	if(p1 == NULL)
		cout << key1 << " not found " << endl;
	else
		cout << key1 << " found at position " << (p1-arr) << endl;

	int key2 = 15;
	int *p2 = (int*)bsearch(&key2,arr,num,sizeof(int),compare);
	if(p2 == NULL)
		cout << key2 << " not found " << endl;
	else
		cout << key2 << " found at position " << (p2-arr) << endl;
	return 0;
}

運行程序時,輸出將是:

10 found at position 2
15 not found

示例 2:bsearch() 函數如何對多個匹配元素起作用?

#include <iostream>
#include <cstdlib>
using namespace std;

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

int main()
{
	const int num = 10;
	int arr[num] = {2,3,5,7,8,10,14,14,14,15};
	int key = 14;
	int *p = (int*)bsearch(&key,arr,num,sizeof(int),compare);

	if(p == NULL)
		cout << key << " not found " << endl;
	else
		/* 14 occurs at position 6,7 and 8*/
		cout << key << " found at position " << (p-arr) << endl;

	return 0;
}

運行程序時,可能的輸出將是:

14 found at position 7

相關用法


注:本文由純淨天空篩選整理自 C++ bsearch()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。