快排&归并&二分查找

来源:互联网 发布:阿里云研发团队人数 编辑:程序博客网 时间: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;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机一自拍就死机怎么办 微信怎么黑屏了怎么办 宝宝睡袋买大了怎么办 社保中间断了一年怎么办 京东阅读换手机怎么办 酷狗自动续费怎么办 qq音乐下载需要钱怎么办 电脑播放音乐没声音怎么办 酷狗账号注销了怎么办 电脑酷狗音乐没有声音怎么办 百度云的视频被净网怎么办 v380用户名或密码错误怎么办 课堂派没签到的怎么办 微信加密忘记了怎么办 视频容量太大上传不了视频怎么办 小米手机打不开主页面怎么办 qq离线文件过期了怎么办 百度云有转存任务正在进行怎么办 港版索尼手机的浏览器怎么办 手机下载文件不能直接打开怎么办 上传到电脑视频打不开了怎么办 百度云播放很卡怎么办 百度云视频很卡怎么办 考虫课程过期了怎么办 私教课程过期了怎么办 在异地交的社保怎么办 1岁宝宝吃粉笔怎么办 宝宝吃了彩色笔怎么办 宝宝吃了彩笔水怎么办 熹妃q传忘记密码怎么办 云课堂2忘记密码怎么办 云课堂密码忘了怎么办 小米云存储空间已经满怎么办 苹果手机云备份空间不足怎么办 办信用卡不知道公司电话怎么办 办信用卡不知道单位电话怎么办 朋友沉迷网络游戏怎么办英文作文 平板的密码忘了怎么办 白泥面膜过期了怎么办 小米手机桌面短信图标不见了怎么办 亚马逊账号注册扣款不成功怎么办