• 快排和归并


    #include<stdio.h>
    #include<time.h>
    #include<windows.h>
    int num[100000005];
    void ss(int *p,int left,int right)
    {
    int i=left,j=right,k=p[i];
    if(left>=right) return;
    while(i<j)
    {
    while(i<j&&p[j]>k) --j;
    if(i<j) p[i++]=p[j];
    while(i<j&&p[i]<k) ++i;
    if(i<j) p[j--]=p[i];
    }
    p[i]=k;
    ss(p,left,i-1);
    ss(p,i+1,right);
    }
    int main()
    {
    freopen("in","r",stdin);
    int n,i;
    scanf("%d",&n);
    for(i=0;i!=n;++i) scanf("%d",&num[i]);
    clock_t lll=clock();
    ss(num,0,n-1);
    printf("%d",clock()-lll);
    return 0;
    }

    #include<stdio.h>
    #include<time.h>
    int source[100000005],temp[100000005];
    void mymerge(int *s,int *t,int start,int mid,int end);
    void mymergrsort(int *s,int *t,int start,int end);
    void mymerge(int *s,int *t,int start,int mid,int end)
    {
    int i=start,j=mid+1,k=start;
    while(i!=mid&&j!=end)
    {
    if(s[i]<s[j]) t[k++]=s[i++];
    else t[k++]=s[j++];
    }
    while(i!=mid+1) t[k++]=s[i++];
    while(j!=end+1) t[k++]=s[j++];
    for(i=start;i<=end;++i) s[i]=t[i];
    }
    void mymergesort(int *s,int *t,int start,int end)
    {
    int mid=(start+end)/2;
    if(start<end)
    {
    mymergesort(s,t,start,mid);
    mymergesort(s,t,mid+1,end);
    mymerge(s,t,start,mid,end);
    }
    }
    int main()
    {
    freopen("in","r",stdin);
    int n,i;
    scanf("%d",&n);
    for(i=0;i!=n;++i) scanf("%d",&source[i]);
    clock_t lll=clock();
    mymergesort(source,temp,0,n-1);
    printf("%d",clock()-lll);
    return 0;
    }

    在1亿个随机数的测试下,快排16555ms,归并25160

  • 相关阅读:
    win10以前连接过的wifi密码怎么查看
    Java 所有版本的jdk下载
    手动设置事务提交
    PostgreSQL 修改表字段常用命令
    Area
    IfSample
    俄军突袭乌克兰,带给中国孩子的思考警示(转给家长)
    创建线程
    linux增加swap分区和删除swapfile文件的方法
    oracle数据库当前用户下所有表名和表名的注释
  • 原文地址:https://www.cnblogs.com/callmebg/p/6378241.html
Copyright © 2020-2023  润新知