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中每個資...