搜索

搜索 可以分为

线性搜索

二分搜索

散列

线性搜索

即从数组开头顺序访问各元素,检查该元素与目标值是否相等。一旦相等便返回该元素的位置并结束。
1.线性搜索的算法效率很低,不过适用于任何形式的数据
2.引入标记,效率翻倍,含有目标关键字的数据放在数组结尾,用作标记

#include<stdio.h>
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 i,n,A[10000+1],q,key,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)	scanf("%d",&A[i]);
	scanf("%d",&q);
	for(i=0;i<q;i++)
	{
		scanf("%d",&key);
		if(search(A,n,key))sum++;
		
	}
	printf("%d\n",sum);
	return 0;
}

二分搜索

表示搜索范围的变量left,right,中间位置的mid;
left表示开头元素
right表示末尾元素的后一个元素
mid是left与right和的一半

#include<stdio.h>
int A[10000+1],n;
int binarysearch(int key)
{
	int left = 0;
	int right = n;
	int mid;
	while(left<right)
	{
		mid = (left+right)/2;
		if(key==A[mid]) return 1;
		if(key < A[mid])	right = mid;	//搜索前半部分
		else if(key>A[mid])  left = mid+1;	//搜索后半部分
	}
	return 0;
}

int main()
{
	int i,q,k,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)	scanf("%d",&A[i]);
	scanf("%d",&q);
	for(i=0;i<q;i++)
	{
		scanf("%d",&k);
		if(binarysearch(k))sum++;
		
	}
	printf("%d\n",sum);
	return 0;
}

散列法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值