之前介绍过常见的排序算法,可以查看这里

之前实现的代码都是针对int型的算法,现在我将代码改写成了模板,这样可以应用于常见的一些类型。

为了测试比较不同的排序算法,采用了两种计时方式。注意,下面的两段代码中,void(*_sort[])(T*,int) 是函数指针数组。

1. 采用clock函数,统计排序算法所使用的时钟数

代码如下: 

template <class T>
void clock_test()
{
    void(*_sort[])(T*,int)={insert_sort,binary_insert_sort,shell_sort,shell_sort2,select_sort,
                           select_sort2,select_sort3,heap_sort,bubble_sort,bubble_sort2,quick_sort,
                           merge_sort,merge_sort2,merge_sort3,merge_sort4,rank_sort,rank_sort2};
    int len=sizeof(_sort)/sizeof(_sort[0]);
    clock_t start,finish;
    //    cout<<CLOCKS_PER_SEC<<endl;
    cout<<"鐩存帴鎻掑叆\t鎶樺崐鎻掑叆\t甯屽皵鎺掑簭\t"<<endl;
    int step=100;
    for(int k=100;k<=100000;k+=step)
    {
        const int N=k;
        T arr[N];
        double tm[N];
        //    srand(time(0));
        for(int i=0;i<N;i++)
            arr[i]=rand()%1000;
        for(int i=0;i<len;i++) {
            start=clock();
            _sort[i](arr,N);
            finish=clock();
            tm[i]=(finish-start)*1.0/CLOCKS_PER_SEC;
        }
        cout<<k<<'\t';
        for(int i=0;i<len;i++)
            cout<<tm[i]<<'\t';
        cout<<endl;
    }
}

部分测试输出如下: 

排序算法时间测试比较

 

2. 利用ftime函数,具体介绍见这儿

代码如下:

template <class T>
void time_test()
{
    void(*_sort[])(T*,int)={insert_sort,binary_insert_sort,shell_sort,shell_sort2,select_sort,
                           select_sort2,select_sort3,heap_sort,bubble_sort,bubble_sort2,quick_sort,
                           merge_sort,merge_sort2,merge_sort3,merge_sort4,rank_sort,rank_sort2};
    int len=sizeof(_sort)/sizeof(_sort[0]);
    struct TIMEB ts1,ts2;
    time_t t_sec,t_ms,ti;
    cout<<"鐩存帴鎻掑叆\t鎶樺崐鎻掑叆\t甯屽皵鎺掑簭\t"<<endl;
    int step=100;
    for(int k=100;k<=100000;k+=step)
    {
        const int N=k;
        T arr[N];
        double tm[N];
        for(int i=0;i<N;i++)
            arr[i]=rand()%1000;
        cout<<k<<'\t';
        for(int i=0;i<len;i++) {
            ftime(&ts1);
            _sort[i](arr,N);
            ftime(&ts2);
            t_sec=ts2.time-ts1.time;
            t_ms=ts2.millitm-ts1.millitm;
            ti=t_sec*1000+t_ms;
            cout<<ti<<'\t';
        }
        cout<<endl;
    }
}

部分测试输出如下:

排序算法时间测试比较

 

最终的全部代码如下:

int>();
}

相关文章:

  • 2021-06-08
  • 2021-10-12
  • 2021-07-30
猜你喜欢
  • 2021-08-08
  • 2021-12-15
  • 2021-07-06
  • 2021-12-10
  • 2021-09-14
相关资源
相似解决方案