您的位置:首页 > 其它

查找----线性表的查找

2016-05-28 11:57 453 查看
#include <iostream>        //引入输入输出流
using namespace std;

int BinSearch1(int r[ ], int n, int k)//查找非递归算法
{
int low=1, high=n,count=0;      //设置初始查找区间
while (low<=high)
{
int mid=(low+high)/2;       //取中间点, 比较k与r[mid],
if (k<r[mid]){
high=mid-1;
}
if (k>r[mid]){
low=mid+1;
}
if(k==r[mid]){
count++;
cout<<"比较次数为:"<<count<<endl; //查找成功
return mid;
}
count++;
}
cout<<"比较次数为:"<<count<<endl;
return 0;//查找失败
}

int BinSearch2(int r[], int low, int high, int k,int count)//查找递归算法
{
if (low>high){
cout<<"比较的次数为:"<<++count<<endl;
return 0;   //递归的边界条件
}
else
{
int mid=(low+high)/2;
if (k<r[mid])
return BinSearch2(r, low, mid-1, k,++count);     //查找在左半区进行
if (k>r[mid])
return BinSearch2(r, mid+1, high, k,++count);    //查找在右半区进行
if (k==r[mid]){
cout<<"比较的次数为:"<<++count<<endl;
return mid;
}
}
}

void main()
{
int s[14]={0,7,14,18,21,23,29,31,35,38,42,46,49,52};
cout<<"有序表中的元素为:"<<endl;
for(int i=1;i<14;i++)
{
cout<<s[i]<<" ";
}
cout<<"\n"<<"查找14,结果为:"<<endl;
cout<<"所在位置为:"<<BinSearch1(s,13,14)<<endl;

cout<<"\n"<<"查找22,结果为:"<<endl;
cout<<"所在位置为:"<<BinSearch1(s,13,22)<<endl;

int count=0;
cout<<"\n"<<"对18执行查找操作,结果为:\n";    //查找成功
cout<<"所在位置为:"<<BinSearch2(s,1,13,18,count)<<endl;

cout<<"\n"<<"对45执行查找操作,结果为:\n";      //查找失败
cout<<"所在位置为:"<<BinSearch2(s,0,12,45,count)<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: