#include<iostream>
using namespace std;
const int max=10;
//顺序查找
int SeqSearch1(int r[],int n,int k)
{
r[0]=k;//第0位存的是带查找的值哨兵,所以数组元素是从1开始的
int i=n;
while(r[i]!=k)
{
i--;
}
return i;//返回元素在数组中的下标即元素的序号
}
int SeqSearch2(int a[], int n, int x)//数组a,n总数,x查找数
{
int i;
for( i=1;i<=n;i++)
{
if(a[i]==x) //查找到x,返回x的位置
return i;
}
if(i>n) //查找完成,没找到返回-1
return -1;
}
//二分查找非递归
int BinSearch1(int r[],int n,int k)
{
int low=1;
int high=n;
while(low<=high)//当区间存在时
{
int mid=(low+high)/2;
if(r[mid]>k)
{
high=mid-1;
}else if(r[mid]<k)
{
low=mid+1;
}
else
return mid;
}
return 0;
}
//二分查找的递归算法
int BinSearch2(int r[],int low,int high,int k)
{
int mid=(low+high)/2;
if(low>high) return 0;
else
{
if(r[mid]>k) return BinSearch2(r,low,mid-1,k);
else if(r[mid]<k) return BinSearch2(r,mid+1,high,k);
else return mid;
}
}
int main()
{
int a[11]={0};
cout<<"请输入10个数:";
cout<<endl;
for(int i=1;i<=10;i++)//从数组位置为1,第二个元素开始存数组元素
{
cin>>a[i];
}
for(int i=1;i<=10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cout<<SeqSearch1(a,10,3);
cout<<endl;
cout<<SeqSearch2(a,10,3);
cout<<endl;
//二分查找的前提是必须是已经有序的序列而且根据本程序的编写序列还必须是递增序列!
cout<<BinSearch1(a,10,3);
cout<<endl;
cout<<BinSearch2(a,1,10,3);
}
顺序查找与折半查找
最新推荐文章于 2022-07-22 12:42:01 发布