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

来源:互联网 发布:mac怎么打包照片 编辑:程序博客网 时间:2024/04/30 07:07
#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;}

0 0