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)第三个参数是排序的方法,可以是从大到小也可是从小 ...
随机推荐
- perl模块终极解决方案--转载
不管别人怎么说,反正我是非常喜欢perl语言的! 也会继续学习,以前写过不少perl模块的博客,发现有点乱,正好最近看到了关于local::lib这个模块. 居然是用来解决没有root权限的用户安装, ...
- xargs -i的用法
find ... | 后面跟文件,就需要用到xargs,其中-i加{}就能替代管道符之前的文件(标准输出的内容) 在/tmp下创建6个文件,1.txt,2.txt,3.txt,4.txt,5.txt, ...
- Spring MVC 实现跨域资源 CORS 请求
说到 AJAX 跨域,很多人最先想到的是 JSONP.的确,JSONP 我们已经十分熟悉,也使用了多年,从本质上讲,JSONP 的原理是给页面注入一个 <script>,把远程 JavaS ...
- recv,recvfrom,send,sendto
一般情况下:send(),recv()用于TCP,sendto()及recvfrom()用于UDP 但是send(),recv()也可以用于UDP,sendto()及recvfrom()也可以用于TC ...
- 如果从excel表中导出insert-sql
=CONCATENATE("INSERT INTO p_act_lottery(actId,status,grantWay,createTime,invalidTime,amount,pri ...
- 手动编译JAVA类
javac -encoding utf-8 -Djava.ext.dirs=D:\JDeveloper\jdevbin\BC4J\lib\;D:\JDeveloper\jdevbin\j2ee\ho ...
- ubuntu16.04 NVIDIA CUDA8.0 以及cuDNN安装
下载CUDA 官网下载按照自己的实际情况进行选择,下载合适的版本. 官方安装指南 注意这里下载的是cuda8.0的runfile(local)文件. 安装CUDA 下载完成后,解压到当前目录,切换到该 ...
- idea装在spring框架报ClassNotFound(转)
原文链接:http://blog.csdn.net/getyouwant/article/details/50417030 环境:intellij 15 ,spring 3.1 本来新建了一个spri ...
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L ...
- 福大软工 · 第十一次作业 - Alpha 事后诸葛亮
拖鞋旅游队团队事后诸葛亮会议 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10054510.html 时间:2018-12-1 20:00 地 ...