演算法訓練 二分查詢

2021-09-25 09:35:38 字數 1214 閱讀 6694

二分查詢建立在待查詢元素有序的前提上

例題

題目描述

輸入n個學生的學號,然後查詢輸入

輸入的第一行為n,即學生的個數(n<=1000)

接下來的n行包括n個學生的資訊,資訊格式如下:

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19

然後輸入乙個 m(m<=10000),接下來會有 m 行,代表 m 次查詢,每行輸入 乙個學號,格式如下:

0203

0104

輸出:

輸出m行,,每行包括乙個對應於查詢的學生的資訊。

如果沒有對應的學生資訊,則輸出「no answer!」

樣例輸入

4

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19502

0301

0403

樣例輸出:

02 劉唐 男 23

03 張軍 男 19

01 李江 男 21

04 王娜 女 19

03 張軍 男 19

考慮到時間複雜度,採用二分查詢

#include#include#includeusing namespace std;

struct student

}buf[1000];

int main()

else if(tmp>0)else

} if(ans==-1)else}}

return 0;

}

除了查詢某特定元素是否存在以為,二分查詢還有另一類非常重要的作用,即定界。

例如,在乙個公升序的陣列中,確定乙個下標點,使在這個下標點之前(包括該下標點)的數字均小於等於目標數字。

//存在乙個公升序的有序陣列buf,其大小為size,目標數字為target

int base =0,top=size-1;

while(base<=top)

int ans=top;

演算法訓練之二分查詢小結(C )

從這週的習題和每日一題來看,二分查詢雖然思想簡單,但變體眾多,且極易出錯。因此,小結以求避坑。參考 王爭老師的專欄 二分查詢 上 二分查詢 下 先給出二分查詢模板 c int low 0 int high n 1 while low high else if a mid value else 其中,...

查詢演算法 二分查詢

利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...

查詢演算法 二分查詢

二分查詢的思路是很簡單的,前提是這組資料是有順序的。思路是從中間找乙個數,判斷大小,如果數比中間數大,說明在中間數到結尾的數中,如果小於,則說明在開始和中間數之間,經過多次相同操作,就可以得到我們想查詢的數時間複雜度就是 o logn 非遞迴的實現 const testarr let i 0whil...