qsort函式和bsearch函式詳解

2021-07-22 03:58:48 字數 2090 閱讀 7707



qsort

包含在標頭檔案中,此函式

根據給的比較條件進行快速排序,排序之後的結果仍然放在原陣列中,需要自己寫乙個比較函式。

函式原型:

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

base :陣列起始位址

num :陣列元素個數

size:每乙個元素的大小

comparator:函式指標,指向比較函式

詳見《c語言標準庫函式qsort詳解》

bsearch

也包含在標頭檔案中,根據給的條件實現二分查詢,如果找到元素則返回指向該元素的指標,否則返回null;對於有多個元素匹配成功的情況,bsearch()未定義返回哪乙個,使用 bsearch 函式也要自己定義比較子函式。

函式原型

void

*bsearch(

const

void

*key,

const

void

*base, size_t num, size_t size,

int(

*cmp)

(const

void

*,const

void*)

);

key指向要查詢的元素

base指向進行查詢的陣列

num陣列中元素的個數

size陣列中每個元素的大小,一般用sizeof()表示

cmp比較兩個元素的函式,定義比較規則。需要注意的是,查詢陣列必須是經過預先排序的,

而排序的規則要和比較子函式cmp的規則相同。

c語言中可以用bsearch()實現二分查詢。同qsort()一樣,bsearch()也包含在庫中,且同樣要自定義比較子函式。其原型如下:

void

*bsearch

(const

void

*key,

const

void

*base,

size_t nmem,

size_t size,

int(

*comp)

(const

void*,

const

void*)

);

key指向所要查詢的元素,base指向進行查詢的陣列,nmem為查詢長度,一般為陣列長度,size為每個元素所佔的位元組數,一般用sizeof(...)表示,comp指向比較子函式,它定義比較的規則。需要注意的是,資料必須是經過預先排序的,而排序的規則要和comp所指向比較子函式的規則相同。如果查詢成功則返回陣列中匹配元素的位址,反之則返回空。對於有多於乙個的元素匹配成功的情況,bsearch()未定義返回哪乙個。

例:#

include

#include

#define num 8

int compare(

const

void

*p,const

void

*q)int main(

int argc,

char

*argv)

;int key = 3;

int*p;

qsort

(array, num,

sizeof

(int

), compare)

;p =

(int*)

bsearch

(&key, array, num,

sizeof

(int

), compare)

;(p =

=null)?

puts

("not found"):

puts

("found");

return 0;

}

結果如下:

found

qsort函式和bsearch函式的使用

1.qsort排序 qsort example include include int values int compare const void a,const void b int main output 10 20 25 40 90 100 2.bsearch查詢 bsearch exampl...

qsort和bsearch的使用

include include include include include using namespace std define n 15 int a n int cmp const void x,const void y int char cmp const void x,const void...

bsearch函式解析

from 函式格式 void bsearch const void key,const void base,size t nmemb,size t size,int compar const void const void 函式功能 將key在一系列base表示的資料中進行挨個比較,base中每個資...