今天蒟蒻来给大家讲线性查找+二分查找
一、线性查找思路+图解+代码
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版权协议,转载请附上原文出处链接和本声明。