NWPU演算法考試複習--二分查詢
阿新 • • 發佈:2018-12-20
二分查詢
描述 給定一個單調遞增的整數序列,問某個整數是否在序列中。 輸入 第一行為一個整數n,表示序列中整數的個數;第二行為n(n不超過10000)個整數;第三行為一個整數m(m不超過50000),表示查詢的個數;接下來m行每行一個整數k。 輸出 每個查詢的輸出佔一行,如果k在序列中,輸出Yes,否則輸出No。 輸入樣例 5 1 3 4 7 11 3 3 6 9 輸出樣例 Yes No No
程式碼
#include <iostream>//這道題這麼簡單就不寫註釋了吧
#include<stdio.h>
#define N 10001
using namespace std;
int binarysearch (int arr[],int size,int x);
int main()
{
int arr[N],i,n,cnt,x;
cin>>n;
for(i=0;i<n;i++) cin>>arr[i];
cin>>cnt;
for(i=0;i<cnt;i++)
{
cin>>x;
if(binarysearch(arr,n,x)==1) cout<<"Yes"<<endl;
else cout<<"No"<< endl;
}
return 0;
}
int binarysearch(int arr[],int size,int x)
{
int left=0,right=size-1,temp;
while(left<=right)
{
temp=(left+right)/2;
if(arr[temp]==x) return 1;
else if(arr[temp]>x) right=temp-1;
else left=temp+1;
}
return -1;
}