方法:快排+二分查找
#include<stdio.h>
#define Maxn 100
int BinaSearch(int Array[],int low,int high,int search_num)
{
while(low<=high){
int mid=(low+high)/2;
if(Array[mid]==search_num)
return 1;
else if(Array[mid]>search_num)
high=mid-1;
else
low=mid+1;
}
return 0;
}
int getIndex(int Array[],int low,int high)//确定元素最终位置
{
int temp=Array[low];
while(low<high){
while(low<high&&Array[high]>=temp) high--;
Array[low]=Array[high];
while(low<high&&Array[low]<=temp) low++;
Array[high]=Array[low];
}
Array[low]=temp;
return low;
}
void quicksort(int Array[],int low,int high)//每次递归都会确定一个元素的最终位置,以此位置划分为左右两个子部分
{ //再对左右子部分进行相同处理
if(low<high){
int index=getIndex(Array,low,high);
quicksort(Array,low,index-1);
quicksort(Array,index+1,high);
}
}
int main()
{
int Array[Maxn],n,m;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&Array[i]);
quicksort(Array,1,n);//快排
scanf("%d",&m);
for(int i=0;i<m;++i){
int temp;
scanf("%d",&temp);
if(BinaSearch(Array,1,n,temp)==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}