可以在在二分查詢前進行排序,提高查詢效率。
qsort() (快速排序,需要自定義比較函式)和bsearch()配合使用。
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void))
void* bsearch(const void*key,const void v,size_t size,int(comp)(const void,const void));
bsearch中的base必須是公升序排列的陣列!!!
如果陣列裡有重複的答案,則bsearch會返回其中乙個的位址 (具體返回哪乙個不確定)
bsearch如果沒找到所求則回傳null ,否則回傳該元素被找到的位址(void *)
兩個函式的標頭檔案都是#include
#include
#include
#include
using
namespace std ;
//用於比較
intcmp
(const
void
* _a,
const
void
* _b)
//展示陣列元素
bool
show_array
(const
int v,
const
int&len)}}
intmain
(int argc,
char
** ar**)
;int target =3;
qsort
(v,10
,sizeof
(int
),cmp)
;show_array
(v,10);
int* ptem=
(int*)
bsearch
(&target, v,10,
sizeof
(int
),cmp);if
(ptem!=
null
)else
return0;
}
結果輸出
show the array:12
2345
9102023
find the target
3
快速排序 二分查詢
1.舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為 2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指標分別從兩邊進行掃瞄,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移 2 4 9 3 6 7 1 5 比較2和1,1小於2,所以把1放在2的位置 1 4...
快速排序 二分查詢
基準數後面的數需要大於基準數,從後向前尋找a j tmp,尋找到a 8 的3 5,將a 8 放入空位a 0 中,a j a 8 此時空出位置 接著從前向後遍歷a i 5,找到a 1 符合條件,將a 1 放入空位a 8 a 1 空出 繼續從後向前尋找 繼續從後向前尋找 遍歷至i j 結束,此時i前邊元...
二分查詢,氣泡排序, 快速排序
class test if start 1 end else mid start intval end start 2 if arr mid x elseif arr mid x elseif arr mid x 氣泡排序 思路 如原始有x個值需要排序 控制最大的值一直往右移動,第一次迴圈必然造成最...