快排&归并&二分查找
来源:互联网 发布:阿里云研发团队人数 编辑:程序博客网 时间:2024/04/29 16:07
算法实验:
#include<iostream>#include<cstring>#include<cmath>#include<ctime>#include<cstdlib>#include<algorithm>#include<iomanip>#include<fstream>#include<map>using namespace std;const int MAXN=1e5;int n,lb,ub;int a[MAXN],b[MAXN];int menu(){ cout<<"选项:"<<endl; cout<<"1、 生成随机数据"<<endl; cout<<"2、 快速排序"<<endl; cout<<"3、 归并排序"<<endl; cout<<"4、 排序后二分查找"<<endl; cout<<"5、 打印结果"<<endl; cout<<"6、 退出系统"<<endl; cout<<"请选择:"; int op; cin>>op; if(op==1) return 1; else if(op==2) return 2; else if(op==3) return 3; else if(op==4) return 4; else if(op==5) return 5; else if(op==6) return 6; else return 7;}void gen(){ srand((unsigned)time(NULL)); cout<<"请输入数据个数:"; cin>>n; cout<<"请输入数据下限:"; cin>>lb; cout<<"请输入数据上限:"; cin>>ub; for(int i=1;i<=n;i++) { a[i]=lb+rand()%(ub-lb+1); }}void print(){ for(int i=1;i<=n;i++) { cout<<a[i]<<" "; if(!(i%10)) cout<<endl; } cout<<endl<<endl;}/*void quicksort1(int i,int j){ int m,n,tmp; int k; m=i; n=j; k=a[(i+j)/2]; while(m<=n) { while(a[m]<k&&m<j) m++; while(a[n]>k&&n>i) n--; if(m<=n) { tmp=a[m]; a[m]=a[n]; a[n]=tmp; m++; n--; } if(m<j) quicksort(m,j); if(n>i) quicksort(i,n); }}*/int Partition(int p,int r){ int i=p,j=r+1; int x=a[p]; while(true) { while(a[++i]>x); while(a[--j]<x); if(i>=j) break; swap(a[i],a[j]); } a[p]=a[j]; a[j]=x; return j;}void quicksort(int p,int r){ if(p<r) { int q=Partition(p,r); quicksort(p,q-1); quicksort(q+1,r); }}void Merge(int low,int mid,int high){ int s=low,t=mid+1,k=low; while(s<=mid&&t<=high) { if(a[s]>a[t]) { b[k]=a[s]; s++; }else { b[k]=a[t]; t++; } k++; } if(s==mid+1) { for(int i=k;i<=high;i++) b[i]=a[t++]; }else { for(int i=k;i<=high;i++) b[i]=a[s++]; } for(int i=low;i<=high;i++) a[i]=b[i];}void mergesort(int low,int high){ if(low<high) { int mid=(low+high)/2; mergesort(low,mid); mergesort(mid+1,high); Merge(low,mid,high); }}int binarysearch(){ /*sort(a+1,a+n+1,greater<int>());//降序 int L=1,R=n,M; while(L<=R) { M=(L+R)/2; if(key==a[M]) return M; else if(key<a[M]) L=M+1; else R=M-1; }*/ int key; cout<<"请输入查找的数字:"; cin>>key; int L=1,R=n,M; while(L<=R) { M=(L+R)/2; if(key==a[M]) return M; else if(key<a[M]) R=M-1; else L=M+1; } return -1;}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); bool flag=true; cout<<"************欢迎进入分治法实验界面***********"<<endl; cout<<endl; while(true) { switch(menu()) { case 1: { gen(); print(); break; } case 2: { quicksort(1,n); print(); break; } case 3: { mergesort(1,n); print(); break; } case 4: { sort(a+1,a+n+1);//升序 print(); while(true) { int ans=binarysearch(); cout<<"查找数字的位置: "<<ans<<endl; cout<<"是否继续查找另外一个数字(Y/N):"; char ch; cin>>ch; if(ch=='N') break; } break; } case 5: { print(); break; } case 6: { flag=false; break; } default: break; } if(!flag) break; } return 0;}
阅读全文
0 0
- 快排&归并&二分查找
- 二分查找 归并排序 快排 详解C++
- 快排 + 二分查找
- 快排,二分查找
- 快排,二分查找
- 快排和二分查找
- SDUT2040 快排与二分查找
- 二分查找与快排算法
- python 实现快排及二分查找
- 面试题目-堆排、快排、二分查找
- Java基础算法:堆排,快排,二分查找
- 分治、归并、快排
- sort(排序) qsort(快排) bsearch(二分查找)
- 字符串查找(二分和快排的运用)
- SDUT 1500 Message Flood (快排+二分查找)
- 快排 + 二分
- 二分 + 快排
- 快排和归并排序
- I2C、SPI、USRT、USRAT通信方式对比
- write
- C++:类型(HorBar,VerBar,Ladder)
- Unity如果制作特效
- spring的静态工厂和实例工厂方法
- 快排&归并&二分查找
- 《Using OpenRefine》翻译~14
- linux下 安装软件的三种方式
- 程序员面试金典——整数转化__(位运算)
- 机器学习&深度学习入门学习资料大全(二)
- Dom4j解析XML
- HBase原理架构
- 关于ubuntu和VS中编译C++的一点问题
- Java实践(一)---数据类型转换