01 複雜度3 二分查詢

2021-10-01 03:53:40 字數 1895 閱讀 3633

本題要求實現二分查詢演算法。

函式介面定義:

position binarysearch

( list l, elementtype x )

;

其中list結構定義如下:

typedef

int position;

typedef

struct lnode *list;

struct lnode

;

l是使用者傳入的乙個線性表,其中elementtype元素可以通過》、==、《進行比較,並且題目保證傳入的資料是遞增有序的。函式binarysearch要查詢x在data中的位置,即陣列下標(注意:元素從下標1開始儲存)。找到則返回下標,否則返回乙個特殊的失敗標記notfound。

裁判測試程式樣例:

#include

#include

#define maxsize 10

#define notfound 0

typedef

int elementtype;

typedef

int position;

typedef

struct lnode *list;

struct lnode

;list readinput()

;/* 裁判實現,細節不表。元素從下標1開始儲存 */

position binarysearch

( list l, elementtype x )

;int

main()

這題不用二分法也可以,兩種方法我都寫在下面。

定義左邊界和右邊界, 開始時左邊界是 1 (注意元素從下標1開始儲存),右邊界是 l->last ,然後拿左邊界和右邊界中間的數 ((left + right) / 2) 和輸入的數 ( x ) 進行比較,如果比x大,那麼右邊界變成 ((left + right) / 2) ,如果比x小,那麼左邊界變成((left + right) / 2) ,迴圈往復,直到right - left = 1(注意要找的數在開頭和結尾的情況,迴圈跳出時 right 和 left 還要單獨比較)

思路簡單,拿每數進行比較,如果相等則break,

如果要找的數在最後一位或者沒找到,那麼時間複雜度為 cn

事實證明二分法確實耗時比較少

附上我寫的 list readinput() **

list readinput()

return p;

}

01 複雜度3 二分查詢

position binarysearch list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elementtype元素可以通過 ...

01 複雜度3 二分查詢

本題要求實現二分查詢演算法。position binarysearch list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用者傳入的乙個線性表,其中elem...

01 複雜度3 二分查詢

思路還是很簡單的,就是 左傾 還是 右傾 的問題。需要注意的細節就是 當要查詢的值在 頭和尾的情況。解決辦法就是在 while 語句的條件的中取 還是 這個需要思考一哈,哈哈哈。附上我的兩個 第乙個是我初學,第二個是我學了兩個月後。二分法的本質就是不停縮小範圍,因為是順序的序列,於是靠找端點縮小範圍...