c++线性查找+二分查找

今天蒟蒻来给大家讲线性查找+二分查找
一、线性查找思路+图解+代码
1.思路
线性查找是一种在数据中查找数据的算法。
线性查找的操作十分简单,只要在数组中从头开始依次往下查找即可。
如果找到了输出即可,没有找到就继续搜下去。
2.图解
在这里插入图片描述
先来找10好了
第一步:在这里插入图片描述
从3开始找,3不等于10,换下一个
第二步:
在这里插入图片描述
到9,9不等于10,下一个
第三步:
在这里插入图片描述
到8,8不等于10,下一个
第四步:
在这里插入图片描述
到10,10=10,输出即可
3.代码

#include<bits/stdc++.h>
using namespace std;
int n,a[1100],b,tot;
int main(){
	scanf("%d%d",&n,&b);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		if(a[i]==b){
			tot=i;
			break;
		} 
	}
	printf("%d",tot);
	return 0;
} 

二、二分查找思路+图解+代码
1.思路:
二分查找也是一种在数组中找数据的算法
但是二分只能对单调递增或单调递减的数组进行查找(如果不符合用个排序即可)。
二分查找通过比较数组间的数据与目标数据的大小,可以得知目标数据是在数组的左边还是右边。
因此,每比较一次范围就缩小了一半。重复执行该操作就可以找到目标数据或得出目标数据不存在的结论。
2.图解:
在这里插入图片描述
这组数据来找3
第一步:在这里插入图片描述
找到最中间的下标所表示的数5,发现5>3,所以右半边可以作废,在左半边找。
第二步:在这里插入图片描述
接下来因为还有偶数个数所以2还是3无所谓按照程序来这里我们就取2,发现2<3所以3在2的右边,1作废
第三步:在这里插入图片描述
接下来因为还有偶数个数所以4还是3无所谓按照程序来这里我们就取3,发现3=3,输出即可。
3.代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[501];
bool mid_search(int x){
	int l=0,r=n-1;
	while(r-l>=0){
		int mid=(l+r)/2;
		if(a[mid]==x)return true;
		else if(a[mid]>x)r=mid-1;
		else l=mid+1;
	}
	return false;	
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){cin>>a[i];}
	sort(a,a+n);
	int x;
	cin>>x;
	if(mid_search(x)){puts("yes");}
	else{puts("no");}
	return 0;
}

好,这次就讲这么多吧。


版权声明:本文为lukehong_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。