STL——sort函数简介
参考:http://blog.csdn.net/s030501408/article/details/5329477
0)与C标准库qsort的比较:http://bbs.csdn.net/topics/330202688
std::sort()比C标准库qsort快是肯定的,能快一倍,对于这一点的解释向来有两种,并且从STL的源码中也得到了确认。
一种是sort不是快速排序,而是多种排序的结合,这一点得到确认,STL的sort源码中可以看到快速排序、堆排序、归并排序等多种排序方式的结合,但是qsort在效率上也是做了优化的,比起一般快排要快得多,三种排序的结合又没有可能让STL的sort再比qsort快上一倍?
更多的说法是说qsort最后一个参数回调函数的影响,多次调用造成的后果。这也是肯定有开销的,但是使用改用内联并没有效率上的提升。
许多理论上的说法在实践中受多种因素的干扰往往会走样。好吧,简单的事:写个小程序测试一下呗。。。
STL里面有个sort函数,复杂度为n*log2(n)。使用这个函数,需要包含头文件(#include<algorithm>)。
1)格式:
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址,默认的排序方式是升序。
简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了。
对向量v排序:sort(v.begin(),v.end());
对符串类string排序:sort(strings,strings+100,cmp)。(需要cmp函数定义“小于运算”:bool cmp(string a,string b){return a<b;},#include<string>)
2)第三个参数:
排序的数据类型不局限于整数,对于没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。
比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。
想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp bool cmp(int a,int b) { return a>b; } 排序的时候就写sort(a,a+100,cmp);
3)一个实例:
# include<iostream>
using namespace std; # include<string.h>
# include<algorithm>//for STL struct Node
{
char number[];
char name[];
int score;
}; bool Cmp1(Node a, Node b)
{
return strcmp(a.number, b.number) < ;
}
bool Cmp2(Node a, Node b)
{
if (strcmp(a.name, b.name) != )
{
return strcmp(a.name, b.name) < ;
}
return strcmp(a.number, b.number) < ;
}
bool Cmp3(Node a, Node b)
{
if (a.score != b.score)
{
return a.score < b.score;
}
return strcmp(a.number, b.number) < ;
} Node node[]; int main()
{
int n, c, i, count = ;
//Node node[100000];
while (cin >> n >> c)
{
if (n == )
{
return ;
}
else
{
for (i = ; i < n; i++)
{
cin >> node[i].number >> node[i].name >> node[i].score;
} switch (c)
{
case :
{
sort(node, node + n, Cmp1);
break;
}
case :
{
sort(node, node + n, Cmp2);
break;
}
case :
{
sort(node, node + n, Cmp3);
break;
}
} cout << "Case " << count++ << ":" << endl;
for (i = ; i < n; i++)
{
cout << node[i].number << " " << node[i].name << " " << node[i].score << endl;
}
}
}
return ;
}
View Cod
STL——sort函数简介的更多相关文章
- 分享stl sort函数坑点导致coredump问题
在<Effective STL> 的条款21中就有讨论:永远让比较函数对相同元素返回false! 也就是说在实现stl sort函数自定义比较器时,一定要满足这种严格弱序化的问题.
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL sort()函数
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同 ...
- STL::sort函数实现
声明:本文参考链接:STL::sort实现. 排序是面试中经常被问及的算法基础知识点,虽然实际应用中不会直接使用,但是理解这些简单的算法知识对于更复杂更实用的算法有一定的帮助,毕竟面试总不能问的太过深 ...
- STL sort 函数实现详解 ZZ
前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不对劲,知道自己回答错了.这几天特意看了一下,在 ...
- STL sort函数的用法
sort在STL库中是排序函数,有时冒泡.选择等O(N^2)算法会超时时,我们可以使用STL中的快速排序O(N log N)完成排序 sort在<algorithm>库里面,原型如下: t ...
- C++ STL sort()函数用法
C++STL提供的在里的排序函数,有以下两种形式 此外还提供有稳定排序版本stable_sort(),用法类似. 第一种形式: template <class RandomAccessItera ...
- C++ STL sort 函数的用法
sort 在 STL 库中是排序函数,有时冒泡.选择等 $\mathcal O(n^2)$ 算法会超时时,我们可以使用 STL 中的快速排序函数 $\mathcal O(n \ log \ n)$ 完 ...
- STL——sort函数的实现原理
实现原理 sort结合了快速排序.堆排序.直接插入排序三种排序方法. 根据不同的数量级别以及不同情况,能自动选用合适的排序方法.当数据量较大时采用快速排序,分段递归.一旦分段后的数据量小于某个阀值,为 ...
随机推荐
- 扫盲Linq知识
LINQ,语言集成查询(Language Integrated Query),是在.NET Framework 3.5 中出现的技术. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形 ...
- ubuntu的vi
ubuntu12.04的vi 1. 安装vim full版本由于Ubuntu预安装的是tiny版本,就会导致我们在使用上的产生不便.所以我们要安装vim的full版本.首先,先卸掉旧版的vi,输入以下 ...
- Samza在YARN上的启动过程 =》 之二 submitApplication
首先,来看怎么构造一个org.apache.hadoop.yarn.client.api.YarnClient class ClientHelper(conf: Configuration) exte ...
- CodeForces 300A Array
http://codeforces.com/problemset/problem/300/A 题意 :给你n个数字,让你分成3组,第一组各个数之积要小于0,第二组要大于0,第三组要等于0,符合要求的答 ...
- 一晚上将一个模板整合进了DJANGO
哈哈,说不定,下个图表项目就可以用上呢???:)
- POJ2528+线段树
见代码. /* 线段树+Lazy 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度. 现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且<=1QW. 后贴的海 ...
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】07-基本数据类型
C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2.Oracle等大型数据库都是C语言写的.其中,提供了4种最常用的基本数据类型:char.int.float.double,使用这些数据类型 ...
- coco2d-js 多屏适配相关API
setDesignResolutionSize() //设计分辨率大小及模式 setContentScaleFactor() //内容缩放因子 setSearchPaths() //资源搜索路径 g ...
- MySQL相关知识
字符串拼接 select * from tablename where mydata like CONCAT(CURDATE(), '%') limit 3 这里concat是字符串拼接, conca ...
- !! UML十四图打油诗记忆法
http://www.cnitpm.com/pm/7458.html UML十四图打油诗记忆法 UML十四图打油诗记忆法 UML它有十四图 包含静态和动态(分类) 类图构件搞对象(类图.构件图.对象图 ...