前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查找(上)

查找(上)

作者头像
AngelNH
发布2020-04-16 11:24:42
2490
发布2020-04-16 11:24:42
举报
文章被收录于专栏:AngelNIAngelNI

查找(静态查找)

1.顺序查找

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	int a[101] ={5,16,20,27,30,36,44,55,60,67,74};
	vector<int > b(a,a+11);
	cout<<"5,16,20,27,30,36,44,55,60,67,74" <<endl;
	cout<<"请输入要查找的数字"<<endl;
	int k;
	cin>>k;
	for(int i =0;i<=b.size();++i)
	{
		if(b[i]==k)
			cout<<"位于第"<<i+1<<"个"<<endl;
	}
	return 0;
}

2.哨兵查找

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	int a[20];
	cout<<"请输入序列长度"<<endl;
	int l ;
	cin>>l; 
	cout<<"请输入查找的序列"<<endl;
	for(int i=1;i<=l;++i)
		cin>>a[i];
	cout<<"请输入要查找的数字"<<endl;
	int k;
	cin>>k;
	a[0]=k;//定义哨兵
	int j;
	for( j =l;a[j]!=k;--j);
	cout<<"位于第"<<j<<"个"<<endl;
	return 0;
}

3.二分查找

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
using namespace std;
int a[20];
int len ;
int k ;
int search_bin()
{
	int l=1,r = len;
	while(l<=r)
	{
		int mid = (l+r)/2;
		if(a[mid]==k)	return mid;
		else if(k<a[mid]) r = mid-1;
		else l = mid+1;
	}
}
int main()
{
	
	cout<<"请输入序列长度"<<endl;
	cin>>len; 
	cout<<"请输入查找的序列"<<endl;
	for(int i=1;i<=len;++i)
		cin>>a[i];
	cout<<"请输入要查找的数字"<<endl;
	cin>>k;
	//二分对有序序列查找 ,先排序,在查找
	sort(a,a+len);
	int ans = search_bin();
	cout<<"位于第"<<ans<<endl; 
	return 0;
}

4. 斐波那契查找

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
using namespace std;
int a[100];
int F[100]; 
int len ;
int k ;
int Fibonacci_Search(int *a,int n,int key)
{
	int low,high,mid,i,k=0;
	low=1;	/* 定义最低下标为记录首位 */
	high=n;	/* 定义最高下标为记录末位 */
	while(n>F[k]-1)
		k++;
	for (i=n;i<F[k]-1;i++)
		a[i]=a[n];
	while(low<=high)
	{
		mid=low+F[k-1]-1;
		if (key<a[mid])
		{
			high=mid-1;		
			k=k-1;
		}
		else if (key>a[mid])
		{
			low=mid+1;		
			k=k-2;
		}
		else
		{
			if (mid<=n)
				return mid;		/* 若相等则说明mid即为查找到的位置 */
			else 
				return n;
		}	
	}
	return 0;
}
 
int main()
{
	F[0]=0;
	F[1]=1;
	for(int i = 2;i < 100;i++)  
	{ 
		F[i] = F[i-1] + F[i-2];  
	} 
	cout<<"请输入序列长度"<<endl;
	cin>>len; 
	cout<<"请输入查找的序列"<<endl;
	for(int i=1;i<=len;++i)
		cin>>a[i];
	cout<<"请输入要查找的数字"<<endl;
	cin>>k;
	
	int result=Fibonacci_Search(a,len,k);
	printf("位于第:%d 位\n",result); 
	

	return 0;
}

5.插入查找

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
using namespace std;
int a[100];
int F[100]; 
int len ;
int k ;
int inter_Search(int *a,int n,int key)
{
	int low,high,mid;
	low=1;	/* 定义最低下标为记录首位 */
	high=n;	/* 定义最高下标为记录末位 */
	while(low<=high)
	{
		mid=low+ (high-low)*(key-a[low])/(a[high]-a[low]); /* 插值 */
		if (key<a[mid])		/* 若查找值比插值小 */
			high=mid-1;		/* 最高下标调整到插值下标小一位 */
		else if (key>a[mid])/* 若查找值比插值大 */
			low=mid+1;		/* 最低下标调整到插值下标大一位 */
		else
			return mid;		/* 若相等则说明mid即为查找到的位置 */
	}
	return 0;
}
int main()
{

	cout<<"请输入序列长度"<<endl;
	cin>>len; 
	cout<<"请输入查找的序列"<<endl;
	for(int i=1;i<=len;++i)
		cin>>a[i];
	cout<<"请输入要查找的数字"<<endl;
	cin>>k;
	int result=inter_Search(a,len,k);
	printf("位于第 %d 位\n",result);
	

	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-13|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查找(静态查找)
    • 1.顺序查找
      • 2.哨兵查找
        • 3.二分查找
          • 4. 斐波那契查找
            • 5.插入查找
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档