二分查詢與快速排序

2021-10-10 23:07:40 字數 1255 閱讀 5627

可以在在二分查詢前進行排序,提高查詢效率。

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個值需要排序 控制最大的值一直往右移動,第一次迴圈必然造成最...