三分检索(递归)
2017-05-26 14:21
92 查看
算法实验
#include<iostream> #include<cstring> #include<cmath> #include<ctime> #include<cstdlib> #include<algorithm> #include<iomanip> #include<fstream> #include<vector> #include<map> using namespace std; const int MAXN=1e4+10; const int INF=0x3f3f3f3f; map<int,bool> mp; int a[MAXN]; int n,pos; void gen() { int lb,ub; srand((unsigned)time(NULL)); cout<<"请输入数据个数:"; cin>>n; cout<<"请输入数据下限:"; cin>>lb; cout<<"请输入数据上限:"; cin>>ub; int tmp; for(int i=1;i<=n;i++) { tmp=lb+rand()%(ub-lb+1); if(!mp[tmp]) { a[i]=tmp; mp[tmp]=true; }else { i--; } } } int trisearch(int L,int R,int key) { if(R<L) pos=-1; else { int mid1=L+(R-L)/3; int mid2=R-(R-L)/3; if(key==a[mid1]) pos=mid1; else if(key==a[mid2]) pos=mid2; else if(key<a[mid1]) pos=trisearch(L,mid1-1,key); else if(key>a[mid2]) pos=trisearch(mid2+1,R,key); else pos=trisearch(mid1+1,mid2-1,key); } return pos; } int main() { ios::sync_with_stdio(false); while(true) { mp.clear(); gen(); sort(a+1,a+n+1); for(int i=1;i<=n;i++) { cout<<a[i]<<" "; if(i%10==0) cout<<endl; } cout<<endl; int key; while(true) { cout<<"请输入要查找的数字: "; cin>>key; int ans=trisearch(1,n,key); if(ans==-1) cout<<"查找失败"<<endl; else cout<<"查找成功,该数字位于排序后的第"<<ans<<"位"<<endl; cout<<endl; cout<<"是否继续查找另外一个数字(Y/N):"; char ch; cin>>ch; if(ch=='N') break; } } return 0; }
相关文章推荐
- 二分检索及三分检索
- 字符串检索-递归遍历文件夹-excel读取成dataset-结果导入到excel
- ORACLE SQL 所有上级组织和所有下属组织 (递归检索)
- 非递归的算法检索目录及子文件
- 递归:检索固定路径内文件和文件夹数量
- MySQL中树形递归检索
- 层次关系表格,不用递归,快速检索。HierarchyId
- 在论坛中出现的比较难的sql问题:21(递归问题 检索某个节点下所有叶子节点)
- 递归文件检索
- oracle树形父子关系递归检索
- Java简单递归实现检索文件
- 用VC++实现图像检索技术
- Linux 文件、内容查找(递归) ,grep ,find 收藏
- 二叉树的遍历(递归和非递归)
- 文本(微博,短信等)检索——查询词扩展
- UIHelper的两个自动递归获取节点的函数(返回Node *)
- EASYUI 1.4版 combobox firefox 下不支持中文检索的问题
- 数据结构实训——单词检索统计程序
- 你必须知道的23个最有用的Elasticseaerch检索技巧
- 无限级分类的非递归实现(存储过程版)