sort+函数指针、sort+比较器对象、qsort速度比较
一、上代码
#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速度比较的更多相关文章
- 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)
		
记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后 ...
 - 获得函数返回值类型、参数tuple、成员函数指针中的对象类型
		
//function_traits.h,获得函数返回值类型.参数tuple.成员函数指针中的对象类型 //参考https://github.com/qicosmos/cosmos/blob/maste ...
 - C++ sort函数用法 C中的qsort
		
需要包含#include <algorithm>MSDN中的定义: template<class RanIt> void sort(RanIt first, RanIt ...
 - 神奇的sort()函数
		
今天来谈一谈sort()函数,sort() 方法用于对数组的元素进行排序,用法为arrayObject.sort(sortby):括号中的为可选参数,准确来说应该是一个函数,这个函数用来规定排序方法, ...
 - Perl Sort函数用法总结和使用实例
		
一) sort函数用法 sort LISTsort BLOCK LISTsort SUBNAME LIST sort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNA ...
 - Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)
		
delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) o ...
 - 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 ...
 - procedure of object 对象的函数指针
		
应用:http://www.cnblogs.com/del88/p/6361117.html 有 class of object ----- 类的类型 那么自然有 方法的类型,方法的类型 分为两种: ...
 - 1806最大数  string和sort函数用法
		
1.C++自带sort函数用法 sort函数有三个参数: (1)第一个是要排序的数组的起始地址 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小 ...
 
随机推荐
- 带宽检测工具iftop
			
1.安装 # yum install iftop –y 2.使用 # iftop -i eth0 -n # iftop -i eth0 -P 说明: 中间的<= =>这两个左右箭头,表示的 ...
 - lua劈分字符串方法及实例
			
由于工作项目需要,最近需要用lua来写一些脚本.然而lua并不想java那样有很多的好用的api,很多方法得我们自己来编写和封装,就比如今天碰到的劈分字符串,查找资料后只能自己写了一个. 代码如下 - ...
 - 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 ...
 - 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 ...
 - OC  数据持久化(数据本地化)- 本地存储
			
// // ViewController.m // IOS_0113_本地存储 // // Created by ma c on 16/1/13. // Copyright (c) 2016年 博文科 ...
 - LINUX 操作记录到syslog,并发送到syslog服务器上
			
首先配置命令记录到syslog中: 在客户端的/etc/bashrc 下添加: logger -p local3.info \"`who am i` ================== ...
 - JS之Iterations
			
for in.for of.for each in 1.for in:用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作),for ... in 循环中的代码每执行一次,就会对数组的元素或者 ...
 - 【转】Javascript中的this
			
作者: 阮一峰 日期: 2010年4月30日 this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ ...
 - react 拖拽排序---原生
			
定义css, 两个动画 .drag-up { -webkit-animation: dragup ease 0.2s 1; animation: dragup ease 0.2s 1; -webkit ...
 - HTML学习3---排版标记
			
上节,我们学习了boda常用的属性以及HTML的一些标记,但是图显示的效果却不是那么的好看. 原因就是没有排版好,我们这次使用居中来使这个页面更好看一点,顺便多加入几个别的标记. HTML排版标记 ( ...