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