SDUT-3376_資料結構實驗之查詢四:二分查詢
阿新 • • 發佈:2018-12-19
資料結構實驗之查詢四:二分查詢
Time Limit: 30 ms Memory Limit: 65536 KiB
Problem Description
在一個給定的無重複元素的遞增序列裡,查詢與給定關鍵字相同的元素,若存在則輸出找到的位置,不存在輸出-1。
Input
一組輸入資料,輸入資料第一行首先輸入兩個正整數n ( n < = 10^6 )和m ( m < = 10^4 ),n是陣列中資料元素個數,隨後連續輸入n個正整數,輸入的資料保證數列遞增。
隨後m行輸入m個待查詢的關鍵字key
Output
若在給定的序列中能夠找到與關鍵字key相等的元素,則輸出位序(序號從0開始),否則輸出-1。
Sample Input
8 3
4 6 8 9 13 20 21 22
6
8
17
Sample Output
1
2
-1
題解:二分查詢的模板題。
#include <stdio.h> #include <stdlib.h> #include <string.h> int a[1123456]; int find(int l,int r,int x) { int m; while(l<=r) { m = (l + r) / 2; if(a[m]==x) return m; else if(a[m]>x) r = m - 1; else l = m + 1; //printf("%d %d\n",l,r); } return -1; } int main() { int m,n,i,x; scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%d",&a[i]); while(m--) { scanf("%d",&x); printf("%d\n",find(0,n-1,x)); } return 0; }