bsearch函式二分法

2022-06-29 03:03:14 字數 1210 閱讀 7497

在初學寫程式時,特別是剛開始接觸資料結構時,基本都是在查詢;

各種排序,其實都是在為查詢做準備。

今天我們來看看關於c語言中自帶的乙個二分法搜尋函式bsearch

通過這個函式可以簡單的認識到二分法搜尋的一些內在的原理,以及發散一點其他搜尋方法的東西。

首先,介紹這個函式

函式原型:

void *bsearch(const void *key, const void *base, size_t *nelem,  

size_t width, int(*fcmp)(const void *, const *))

標頭檔案:#include

引數介紹:

引數key指向要查詢的關鍵字的指標;

base指向從小到大的次序存放元素的查詢表;

nelem指定查詢表元素的個數;

width指定查詢表中每個元素的位元組數;

int(*fcmp)(const void *, const *)為由使用者提供的比較函式。

******************************===

首先,給出乙個簡單的比較函式

然後在main函式中我們只需要將各種引數按照順序填進函式中呼叫就可以了。

像這樣……

int search[10]=   

int a=13,*p,i;

p=(int *)bsearch(&a, search,10, sizeof(int),cmp);

其他的東西就不寫了,全寫出來就沒意思了最後給出二分查詢的介紹:

二分法搜尋又叫做折半搜尋或折半查詢。它是一種經典的順序檔案查詢演算法,要求查詢表按關鍵字有序排列(從小到大或從大到小,bsearch函式要求從小到大排列)。其查詢思想是:逐漸縮小查詢範圍,直至得到查詢結果。查詢過程為(以從小到大的序列為例):將要查詢的元素的關鍵字k與當前當前查詢範圍內位於居中的那個元素的關鍵字進行比較,若匹配,則查詢成功,返回該元素的指標即可;否則,若查詢元素的關鍵字k小於當前查詢範圍內位於居中的那個元素的關鍵字,則到當前查詢範圍的前半部分重複上述查詢過程,若查詢元素的關鍵字k大於當前查詢範圍內位於居中的那個元素的關鍵字,則到當前查詢範圍的後半部分重複上述查詢過程。

最後,函式原型中提到的那個使用者提供的比較函式可以稍微關注下,

看到這個函式的時候 我想到了好像以前在js裡面也遇到過要使用者自己提供比較函式的情況,

參考這篇文章:

二分法 查詢 排序以及庫函式bsearch的用法

1 二分查詢 binary search 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。不妨設有序表是遞增有序的。2 二分查詢的基本思想 二分查詢的基本思想是 設r low.high 是當前的查詢區間 1 首先確...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...