二分查詢建立在待查詢元素有序的前提上例題
題目描述
輸入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...