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)第三个参数是排序的方法,可以是从大到小也可是从小 ...
随机推荐
- java学习之浅谈多线程1
创建任务和线程 任务就是对象,为了创建任务,必须首先为任务定义一个类.任务类必须实现Runnable接口.Runnable接口非常简单,它只有一个run方法.需要实现这个方法来告诉系统线程将如何运行. ...
- Spring IOC容器的初始化流程
IOC初始化流程 Resource定位:指对BeanDefinition的资源定位过程.Bean 可能定义在XML中,或者是一个注解,或者是其他形式.这些都被用Resource来定位, 读取Resou ...
- zookeeper和Eureka对CAP理论的支持
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡.在此Zookeeper保证 ...
- 不能访问虚拟机上的nginx网站
VMware虚拟机上配置nginx后,本机无法访问问题 转自:http://www.server110.com/nginx/201407/10794.html 把nginx装在CentOS上,用本机访 ...
- hdu1850nim博弈输出问题
和之前一道题是类似的,输出第一步走的方法,遍历数组找到a[i]^s<a[i]的那个数a[i]-a[i]^s就是要取的数 #include<map> #include<set&g ...
- hdu4292网络流dinic
因为数组开小了,导致tle了一整天:( tle的几点原因:http://blog.csdn.net/ameir_yang/article/details/53698478 思路都是对的,把每个人进行拆 ...
- 173. Binary Search Tree Iterator -- 迭代器
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- MapReduce中文翻译
MapReduce:超大机群上的简单数据处理 摘要 MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个map函数处理一个key/value对,从而产生中间的key/va ...
- 客户端链接Blog
Word 2013链接Blog 1.设置共享->发布至博客->发布至博客 2.新建博客账户 3.添加新建账户信息 注意:URL内为Blog名,而非用户名 a) 在"Type of ...
- 彻底解决WP的TextBox中文字过长显示不出来的问题
文字如果过长的话在TextBox中会显示不完全,这个大家都知道了,后来有人做了ExTextblock增强控件,大部分文字是可以显示出来了,不过,在某些情况下还是会有显示不全的情况. 这个时候一个解决方 ...