一、上代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 50000000
struct TS {
    int a, b, c;
};
inline bool cmp(const TS& t1, const TS& t2) {
    if(t1.a != t2.a)return t1.a < t2.a;
    if(t1.b != t1.b)return t1.b < t2.b;
    return t1.c <= t2.c;
}

int cmp4qsort(const void* a, const void* b) {
    TS *t1 = (TS*)a, *t2 = (TS*)b;
    if(t1->a != t2->a)return t1->a - t2->a;
    if(t1->b != t2->b)return t1->b - t2->b;
    return t1->c - t2->c;
}

struct cmpFunctor {
    inline bool operator() (const TS& t1, const TS& t2) {
        if(t1.a != t2.a)return t1.a < t2.a;
        if(t1.b != t1.b)return t1.b < t2.b;
        return t1.c <= t2.c;
    }
};
TS tss[MAXN];

void gen(){
    ;i < MAXN;++i){
        tss[i].a = rand() * rand();
        tss[i].b = rand() * rand();
        tss[i].c = rand() * rand();
    }
}

int main() {
    srand((unsigned)time(NULL));
    gen();
    clock_t st = clock();
    sort(tss, tss + MAXN, cmp);
    printf("sort by function pointer:%ld\n", clock() - st);

    gen();
    st = clock();
    sort(tss, tss + MAXN, cmpFunctor());
    printf("sort by functor:%ld\n", clock() - st);

    gen();
    st = clock();
    qsort(tss, MAXN, ]), cmp4qsort);
    printf("qsort by function pointer:%ld\n", clock() - st);
    ;
}

二、在开-O2优化的情况下,计算结果:

三、从结果中可以看出,sort+比较器对象是最快的。sort次之,qsort最慢。在ACM中,如果时间限卡的比较紧,可以考虑这一个优化点

参考自:《算法竞赛入门经典——习题和解答》,2018版。

sort+函数指针、sort+比较器对象、qsort速度比较的更多相关文章

  1. 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)

    记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后 ...

  2. 获得函数返回值类型、参数tuple、成员函数指针中的对象类型

    //function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...

  3. C++ sort函数用法 C中的qsort

    需要包含#include <algorithm>MSDN中的定义: template<class RanIt>     void sort(RanIt first, RanIt ...

  4. 神奇的sort()函数

    今天来谈一谈sort()函数,sort() 方法用于对数组的元素进行排序,用法为arrayObject.sort(sortby):括号中的为可选参数,准确来说应该是一个函数,这个函数用来规定排序方法, ...

  5. Perl Sort函数用法总结和使用实例

    一) sort函数用法 sort LISTsort BLOCK LISTsort SUBNAME LIST sort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNA ...

  6. Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)

    delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) o ...

  7. sort函数(cmp)、map用法---------------Tju_Oj_2312Help Me with the Game

    这道题里主要学习了sort函数.sort的cmp函数写法.C++的map用法(其实和数组一样) Your task is to read a picture of a chessboard posit ...

  8. procedure of object 对象的函数指针

    应用:http://www.cnblogs.com/del88/p/6361117.html 有 class of object ----- 类的类型 那么自然有 方法的类型,方法的类型 分为两种: ...

  9. 1806最大数 string和sort函数用法

    1.C++自带sort函数用法 sort函数有三个参数: (1)第一个是要排序的数组的起始地址 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小 ...

随机推荐

  1. 带宽检测工具iftop

    1.安装 # yum install iftop –y 2.使用 # iftop -i eth0 -n # iftop -i eth0 -P 说明: 中间的<= =>这两个左右箭头,表示的 ...

  2. lua劈分字符串方法及实例

    由于工作项目需要,最近需要用lua来写一些脚本.然而lua并不想java那样有很多的好用的api,很多方法得我们自己来编写和封装,就比如今天碰到的劈分字符串,查找资料后只能自己写了一个. 代码如下 - ...

  3. spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar)

    spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar) 如果使用的run as – java a ...

  4. Creating SSL keys, CSRs, self-signed certificates, and .pem files.

    What is the whole darned process? Well that’s a good question. For my purposes, this is what I need ...

  5. OC 数据持久化(数据本地化)- 本地存储

    // // ViewController.m // IOS_0113_本地存储 // // Created by ma c on 16/1/13. // Copyright (c) 2016年 博文科 ...

  6. LINUX 操作记录到syslog,并发送到syslog服务器上

    首先配置命令记录到syslog中: 在客户端的/etc/bashrc  下添加: logger -p local3.info  \"`who am i` ================== ...

  7. JS之Iterations

    for in.for of.for each in 1.for in:用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作),for ... in 循环中的代码每执行一次,就会对数组的元素或者 ...

  8. 【转】Javascript中的this

    作者: 阮一峰 日期: 2010年4月30日 this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ ...

  9. react 拖拽排序---原生

    定义css, 两个动画 .drag-up { -webkit-animation: dragup ease 0.2s 1; animation: dragup ease 0.2s 1; -webkit ...

  10. HTML学习3---排版标记

    上节,我们学习了boda常用的属性以及HTML的一些标记,但是图显示的效果却不是那么的好看. 原因就是没有排版好,我们这次使用居中来使这个页面更好看一点,顺便多加入几个别的标记. HTML排版标记 ( ...