zoukankan      html  css  js  c++  java
  • 排序作业

    #include <iostream>
    #include <sys/time.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    
    
    int a[10005],b[10005],n;
    
    void select_sort()
    {
        int i,j,x;
        for(i=0;i<n-1;i++)
        {
            x = i;
            for(j=i+1;j<n;j++)
            {
                if(b[j]<b[x]) x=j;
            }
            if(x!=i) swap(b[x],b[i]);
        }
    }
    
    void insert_sort()
    {
        int i,j;
        for(i=1;i<n;i++)
        {
            int tmp = b[i];
            for(j=i;j>0 && tmp<b[j-1];j--)
            {
                b[j] = b[j-1];
                b[j-1] = tmp;
            }
        }
    }
    
    void show()
    {
        int i;
        for(i = 0;i<n;i++) printf("%d ",b[i]);
        printf("
    ");
    }
    
    LL getCurrentTime()
    {
       struct timeval tv;
       gettimeofday(&tv,NULL);
       return tv.tv_sec * 1000 + tv.tv_usec / 1000;
    }
    
    
    int main()
    {
        int i,j,k,t;
        LL t1,t2;
        double tsum;
        while(~scanf("%d",&n) && n)
        {
            printf("数据规模:%d
    20组样本时间(ms):
    ",n);
            srand(unsigned(time(0)));
            for(j=1;j<=20;j++)
            {
                tsum=0;
                for(i = 0;i<n;i++) a[i] = rand()%1000;
                for(k=0;k<1000000;k++)
                {
                    for(i = 0;i<n;i++) b[i] = a[i];
                    t1 = getCurrentTime();
                    select_sort();
                    t2 = getCurrentTime();
                    tsum+=(t2-t1);
                }
                show();
                printf("% lf",tsum/1000000);
                if(j%5==0) printf("
    ");
            }
        }
    
        return 0;
    }
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <sys/time.h>
    #include <windows.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int T = 1;//循环次数
    const int G = 20;//样本组数
    
    int a[100005],b[100005],c[100005],n;
    
    void select_sort()//选择排序
    {
        int i,j,x;
        for(i=0;i<n-1;i++)//循环n次
        {
            x = i;
            for(j=i+1;j<n;j++)//找最小的一个数
            {
                if(b[j]<b[x]) x=j;
            }
            if(x!=i) swap(b[x],b[i]);//与i交换
        }
    }
    
    void insert_sort()//插入排序
    {
        int i,j;
        for(i=1;i<n;i++)
        {
            int tmp = b[i];
            for(j=i;j>0 && tmp<b[j-1];j--)//寻找在已排序好的数列中插入的位置
            {
                //交换
                b[j] = b[j-1];
                b[j-1] = tmp;
            }
        }
    }
    
    void bubble_sort()//冒泡排序
    {
        int i,j;
        for(i=0;i<n-1;i++)//循环n次
        {
            for(j=0;j<n-1-i;j++)//将最大的移到最后面
            {
                if(b[j]>b[j+1]) swap(b[j],b[j+1]);//不断交换
            }
        }
    }
    
    void merge_arr(int lo,int mid,int hi)//合并两个有序数组
    {
        int len = 0,i=lo,j=mid+1;
        while(i<=mid && j<=hi)//将较小的入列
        {
            if(b[i]<=b[j]) c[len++]=b[i++];
            else c[len++] = b[j++];
        }
        //将剩余的入列,下面两个只会执行一个
        while(i<=mid) c[len++] = b[i++];
        while(j<=hi) c[len++] = b[j++];
    
        for(i=0;i<len;i++) b[lo+i] = c[i];
    }
    
    void merge_sort(int lo,int hi)//归并排序
    {
        if(lo<hi)//二分排序
        {
            int mid = (lo+hi)>>1;
            merge_sort(lo,mid);
            merge_sort(mid+1,hi);
            merge_arr(lo,mid,hi);
        }
    }
    
    void quick_sort(int lo,int hi)//快速排序
    {
        if(lo<hi)//二分
        {
            int x=b[lo],i=lo,j=hi;
            while(i<j)//填坑法
            {
                while(i<j && b[j]>=x) j--;//从右往左找到一个比基准大的
                if(i<j)
                {
                    b[i] = b[j];
                    i++;
                }
                while(i<j && b[i]<x) i++;//从左往右找到一个比基准小的
                if(i<j)
                {
                    b[j] = b[i];
                    j--;
                }
            }
            b[i] = x;
            quick_sort(lo,i);
            quick_sort(i+1,hi);
        }
    
    }
    
    void showa()
    {
        int i;
        for(i = 0;i<n;i++) printf("%d ",a[i]);
        printf("
    ");
    }
    
    void showb()
    {
        int i;
        for(i = 0;i<n;i++) printf("%d ",b[i]);
        printf("
    ");
    }
    
    LL getCurrentTime()//计算算法执行时间
    {
       /*
       struct timeval tv;
       gettimeofday(&tv,NULL);
       return tv.tv_sec * 1000 + tv.tv_usec / 1000;
       */
       DWORD start;
       start = GetTickCount();
       //printf("time %d
    ",start);
       return start;
    }
    
    
    int main()
    {
        int i,j,k,t;
        LL t1,t2;
        double tsum,tsum2,tsum3,tsum4,tsum5,sum=0,sum2=0,sum3=0,sum4=0,sum5=0;
        while(~scanf("%d",&n) && n)
        {
            printf("数据规模:%d
    20组样本时间(ms):
    ",n);
            printf("选择		插入		归并		冒泡		快速
    ");
            srand(unsigned(time(0)));
            for(j=1;j<=G;j++)//样本组数
            {
                tsum=tsum2=tsum3=tsum4=tsum5=0;
                for(i = 0;i<n;i++) a[i] = rand()%1000000;//随机数组
                //show();
                for(k=0;k<T;k++)//数据小时循环次数
                {
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    select_sort();
                    t2 = getCurrentTime();
                    tsum+=(t2-t1);
                    //showb();
                    //printf("
    ");
    
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    insert_sort();
                    t2 = getCurrentTime();
                    tsum2+=(t2-t1);
                    //showb();
                    //printf("
    ");
    
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    merge_sort(0,n-1);
                    t2 = getCurrentTime();
                    tsum3+=(t2-t1);
                    //showb();
                    //printf("
    ");
    
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    bubble_sort();
                    t2 = getCurrentTime();
                    tsum4+=(t2-t1);
                    //showb();
                    //printf("
    ");
    
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    quick_sort(0,n-1);
                    t2 = getCurrentTime();
                    tsum5+=(t2-t1);
                    //showb();
                    //printf("
    ");
                }
                //show();
                sum+=tsum/T;sum2+=tsum2/T;sum3+=tsum3/T;sum4+=tsum4/T;sum5+=tsum5/T;
                printf("%lf	%lf	%lf	%lf	%lf
    ",tsum/T,tsum2/T,tsum3/T,tsum4/T,tsum5/T);
            }
            printf("平均时间:
    ");
            printf("%lf	%lf	%lf	%lf	%lf
    ",sum/20,sum2/20,sum3/20,sum4/20,sum5/20);
        }
    
        return 0;
    }
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <sys/time.h>
    #include <windows.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int T = 1;//循环次数
    const int G = 20;//样本组数
    
    int a[100005],b[100005],c[100005],n;
    
    void select_sort()
    {
        int i,j,x;
        for(i=0;i<n-1;i++)
        {
            x = i;
            for(j=i+1;j<n;j++)
            {
                if(b[j]<b[x]) x=j;
            }
            if(x!=i) swap(b[x],b[i]);
        }
    }
    
    void insert_sort()
    {
        int i,j;
        for(i=1;i<n;i++)
        {
            int tmp = b[i];
            for(j=i;j>0 && tmp<b[j-1];j--)
            {
                b[j] = b[j-1];
                b[j-1] = tmp;
            }
        }
    }
    
    void bubble_sort()
    {
        int i,j;
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-1-i;j++)
            {
                if(b[j]>b[j+1]) swap(b[j],b[j+1]);
            }
        }
    }
    
    void merge_arr(int lo,int mid,int hi)
    {
        int len = 0,i=lo,j=mid+1;
        while(i<=mid && j<=hi)
        {
            if(b[i]<=b[j]) c[len++]=b[i++];
            else c[len++] = b[j++];
        }
        while(i<=mid) c[len++] = b[i++];
        while(j<=hi) c[len++] = b[j++];
    
        for(i=0;i<len;i++) b[lo+i] = c[i];
    }
    
    void merge_sort(int lo,int hi)
    {
        if(lo<hi)
        {
            int mid = (lo+hi)>>1;
            merge_sort(lo,mid);
            merge_sort(mid+1,hi);
            merge_arr(lo,mid,hi);
        }
    }
    
    void quick_sort(int lo,int hi)
    {
        if(lo<hi)
        {
            int x=b[lo],i=lo,j=hi;
            while(i<j)
            {
                while(i<j && b[j]>=x) j--;
                if(i<j)
                {
                    b[i] = b[j];
                    i++;
                }
                while(i<j && b[i]<x) i++;
                if(i<j)
                {
                    b[j] = b[i];
                    j--;
                }
            }
            b[i] = x;
            quick_sort(lo,i);
            quick_sort(i+1,hi);
        }
    
    }
    
    void showa()
    {
        int i;
        for(i = 0;i<n;i++) printf("%d ",a[i]);
        printf("
    ");
    }
    
    void showb()
    {
        int i;
        for(i = 0;i<n;i++) printf("%d ",b[i]);
        printf("
    ");
    }
    
    LL getCurrentTime()
    {
       /*
       struct timeval tv;
       gettimeofday(&tv,NULL);
       return tv.tv_sec * 1000 + tv.tv_usec / 1000;
       */
       DWORD start;
       start = GetTickCount();
       //printf("time %d
    ",start);
       return start;
    }
    
    
    int main()
    {
        int i,j,k,t;
        LL t1,t2;
        double tsum,tsum2,tsum3,tsum4,tsum5,sum=0,sum2=0,sum3=0,sum4=0,sum5=0;
        while(~scanf("%d",&n) && n)
        {
            printf("数据规模:%d
    20组样本时间(ms):
    ",n);
            printf("插入
    ");
            srand(unsigned(time(0)));
            for(j=1;j<=G;j++)
            {
                tsum=tsum2=tsum3=tsum4=tsum5=0;
                for(i = 0;i<n;i++) a[i] = rand()%1000000;
                //show();
                for(k=0;k<T;k++)
                {
                    for(i = 0;i<n;i++) b[i] = a[i];
                    //showb();
                    t1 = getCurrentTime();
                    insert_sort();
                    t2 = getCurrentTime();
                    tsum+=(t2-t1);
                    //showb();
                    //printf("
    ");
                }
                //show();
                sum+=tsum/T;
                printf("%.2lf
    ",tsum/T);
            }
            printf("平均时间:
    ");
            printf("%lf
    ",sum/20);
        }
    
        return 0;
    }
  • 相关阅读:
    Service、chkconfig命令
    mongoDB 入门
    HTTP 缓存
    MIME类型记录
    CSS3 动画 思维导图
    部署Seafile服务
    AngularJS 学习笔记
    Bootstrap3 学习笔记
    CSS 弹性盒
    传送门(portal)
  • 原文地址:https://www.cnblogs.com/qlky/p/5865124.html
Copyright © 2011-2022 走看看