搜索(线性、二分)

给定两个数列,寻找两个数列中相同的数的个数
线性搜索


#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);
}

猜你喜欢

转载自blog.csdn.net/qiulianshaonv_wjm/article/details/82466288
今日推荐