zoukankan      html  css  js  c++  java
  • 数据结构实训五——排序算法应用

    1. 实验目的:
      (1)熟练掌握常用的内排序方法并加以比较。
    2. 实验内容:
      利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。要求:
      (1)至少采用三种方法实现上述问题求解(提示,可采用的方法有希尔排序、起泡排序、快速排序、选择排序、堆排序)。并把排序后的结果保存在不同的文件中。
      (2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
      3.实验代码:
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=20000+100;
    int a[maxn],n,b[maxn];
    void sortloop(int n,int *b)
    {
        for(int i=1; i<n; i++)
        {
            for(int j=i+1; j<=n; j++)
                if(b[i]>b[j]) swap(b[i],b[j]);
        }
    }
    void sortquick(int l,int r,int *b)
    {
        if(l<r)
        {
            int val=b[l];
            int low=l,high=r;
            while(low<high)
            {
                while(b[high]>=val&&low<high) high--;
                b[low]=b[high];
                while(b[low]<=val&&low<high) low++;
                b[high]=b[low];
            }
            a[low]=val;
            sortquick(l,low-1,b);
            sortquick(low+1,r,b);
        }
    }
    void sortshell(int n,int *b){
        /*for(int gap=2*n;gap;gap=gap/2){
            for(int i=gap;i<=n;i++){
                for(int j=i-gap;j>=1;j-=gap){
                    if(b[j]>b[j+gap]) swap(b[j],b[j+gap]);///不优化
                }
            }
        }*/
        for(int gap=2*n;gap;gap=gap/2){
            for(int i=1;i<=gap;i++){///gap组
                for(int j=i+gap;j<=n;j+=gap){
                    if(b[j]<b[j-gap]){
                        int tmp=b[j],q=j-gap;
                        while(q>=1&&b[q]>tmp){
                            b[q+gap]=b[q];q-=gap;
                        }
                        b[q+gap]=tmp;
                    }
                }
            }
        }
    }
    int main()
    {
        srand(time(0));//随机数种子
        clock_t s,e;
        n=(rand()*rand()+rand())%20000+1;///随机生成数组的长度
        for(int i=1; i<=n; i++)
        {
            a[i]=(rand()*rand()+rand())%10000+1;///随机生成数组内的元素
            b[i]=a[i];///拷贝
        }
        cout<<"原数组的元素为:"<<endl;
         /*for(int i=1;i<=n;i++){
             cout<<a[i]<<" ";
             if(i%5==0) puts("");
         }*/
        ///选择排序 希尔排序 堆排序
        s=clock();///计算代码运行时间
        cout<<"冒泡排序后的元素为"<<endl;
        sortloop(n,b);
        /*for(int i=1;i<=n;i++){
            cout<<b[i]<<" ";
            if(i%5==0) puts("");
        }*/
        e=clock();
        cout<<"冒泡排序花费的时间为:"<<(double(e-s)/CLOCKS_PER_SEC)<<"s
    ";
    
        s=clock();///计算代码运行时间
        cout<<"快速排序后的元素为"<<endl;
        for(int i=1; i<=n; i++) b[i]=a[i];
        sortquick(1,n,b);
        /*for(int i=1;i<=n;i++){
            cout<<b[i]<<" ";
            if(i%5==0) puts("");
        }*/
        e=clock();
        cout<<"快速排序花费的时间为:"<<(double(e-s)/CLOCKS_PER_SEC)<<"s
    ";
    
        s=clock();///计算代码运行时间
        cout<<"希尔排序后的元素为"<<endl;
        for(int i=1; i<=n; i++) b[i]=a[i];
        sortshell(n,b);
        /*for(int i=1;i<=n;i++){
            cout<<b[i]<<" ";
            if(i%5==0) puts("");
        }*/
        e=clock();
        cout<<"希尔排序花费的时间为:"<<(double(e-s)/CLOCKS_PER_SEC)<<"s
    ";
    
        return 0;
    }
    
    
  • 相关阅读:
    golang API开发过程的中的自动重启(基于gin框架)
    单位时间的调度问题 —— 贪心
    Qt获取文件夹下文件
    C++ using
    QGridLayout动态添加控件
    数据库查询优化-20条必备sql优化技巧
    Django:类视图的装饰器
    使用同一个模态框进行新增和修改
    Django:使用celery处理异步任务
    jenkins:调用jenkinsAPI
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853056.html
Copyright © 2011-2022 走看看