给定两个数列,寻找两个数列中相同的数的个数
线性搜索
#include<iostream>
using namespace std;
int search(int a[], int n, int key)
{
int i = 0;
a[n] = key;
while(a[i]!=key)
i++;
return i!=n;
}
int main()
{
int n,a[10000+1],q,key,sum = 0;
scanf("%d",&n);
for(int i = 0; i < n;i ++)
scanf("%d",&a[i]);
scanf("%d",&q);
for(int i = 0; i < q; i++)
{
scanf("%d",&key);
if(search(a,n,key))
sum++;
}
printf("%d\n",sum);
}
二分搜索:
//二分搜索
#include<stdio.h>
int a[1000000],n;
int binarysearch(int key)
{
int left = 0;
int right = n;
int mid;
while(left<right)
{
mid = (right+left)/2;
if(key==a[mid])
return 1;
if(key>a[mid])
left = mid + 1;
else if(key<a[min])
right = mid - 1;
}
return 0;
}
int main()
{
int q,k,sum = 0;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
scanf("%d",&q);
for(int i = 0; i < q; i++)
{
scanf("%d",&k);
if(binarysearch(k))
sum++;
}
printf("%d\n",sum);
}