查找----线性表的查找
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; }
相关文章推荐
- Android Virtual Device Manager不能建立新的设备类型的应急解决方法
- redmine与SVN的Https方式整合问题
- 内存泄露如何解决?
- C#利用TcpListener和TcpClient类实现服务器和客户端的通信
- 字符串匹配算法--KMP算法
- 淘宝,京东,苏宁易购技术架构(路线)分析和比较
- Android FileObserver 实现原理(inotify)
- 十多家广州互联网公司的服务端面试经验
- smarty的section嵌套循环用法示例
- PetaPoco初体验(转)
- 动态创建的元素怎么做动画
- 设计模式学习笔记--抽象工厂模式
- hdu 1548 简单的bfs
- OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序
- HDU 1016 Prime Ring Problem (DFS)
- Handler与Message
- redis消息发送与订阅
- gulp的使用
- tcpdump permission denied问题解决
- 框架模式 MVC 在Android中的使用