C++标准库---sort()stable_sort

news/2024/5/17 16:45:53 标签: C++, 归并排序, 快速排序, 标准,

sort(beg,end)

sort(beg,end,op)


stable(beg,end,)

stable(beg,end,op)


1.sort()与stable_sort()的上述第一形式,使用operator<对区间[beg,end)内的所有元素进行排序。

2.sort()与stable_sort()的上述第二形式,使用二元判断式op(elem1,elem2)作为排序准则,对区间[beg,end)内的所有元素进行排序。

3.sort()和stable_sort()的区别是,后者保证相等元素的原本相对次序在排序后保持不变。即stable_sort()是稳定排序。所谓稳定排序,是指对一个序列进行排序之后,如果两个元素的值相等,则原来乱序时在前面的元素现在(排好序之后)仍然排在前面。sort()没有这个承诺,而stable_sort()承诺了这一点。

4.不可以对list调用这些算法,因为list不支持随机存取迭代器,不过对于list,其自身带有成员函数,可以完成sort(),对其自身元素排序。

5.sort()的平均排序效能是nlogn,如果想避免可能出现的差情况,应该使用partial_sort()。

6.sort()内部使用快速排序,stable_sort()使用归并排序


代码示例:

#include"fuzhu.h"

using namespace std;

int main()
{
	deque<int> coll;

	INSERT_ELEMENTS(coll,1,9);

	INSERT_ELEMENTS(coll,1,9);

	PRINT_ELEMENTS(coll,"on entry: ");

	sort(coll.begin(),coll.end());  // [beg,end)  默认less  <

	PRINT_ELEMENTS(coll,"sorted: ");

	sort(coll.begin(),coll.end(),greater<int>());   //[beg,end) greater >

	PRINT_ELEMENTS(coll,"sorted >: ");

	system("pause");
	return 0;
}

运行结果:



#include"fuzhu.h"

using namespace std;

struct Node
{
	int value;
	int index;
};

bool mycmp(const Node& a,const Node& b)
{
	return a.value<b.value;
}

int main()
{
	vector<Node> coll;
	vector<Node>::iterator pos;

	Node node;

	int va;

	for(int i=0;i<=8;i++)
	{
		cin>>va;
		node.value=va;
		node.index=i;
		coll.push_back(node);
	}

	stable_sort(coll.begin(),coll.end(),mycmp);

	//sort(coll.begin(),coll.end(),mycmp);
	
	cout<<"stable_sort: "<<endl;

	for(pos=coll.begin();pos!=coll.end();++pos)
	{
		cout<<pos->value<<" "<<pos->index<<endl;
	}

	system("pause");
	return 0;
}

运行结果:



http://www.niftyadmin.cn/n/1774219.html

相关文章

Google Closure Compiler高级压缩混淆Javascript代码

一、背景 前端开发中&#xff0c;特别是移动端&#xff0c;Javascript代码压缩已经成为上线必备条件。 如今主流的Js代码压缩工具主要有&#xff1a; 1&#xff09;Uglify http://lisperator.net/uglifyjs/2&#xff09;YUI Compressor http://developer.yahoo.com/yui/compres…

BX LR 的用途

2019独角兽企业重金招聘Python工程师标准>>> bx lr 的作用等同于 mov pc,lr 即跳转到lr中存放的地址处。 那么lr存放的是什么地址呢&#xff1f; lr就是连接寄存器(Link Register, LR)&#xff0c;在ARM体系结构中LR的特殊用途有两种&#xff1a;一是用来保存子程序…

shll 统计文件夹及文件个数

shell 统计当前文件夹下的文件个数、目录个数 1、 统计当前文件夹下文件的个数 ls -l | grep "^-" | wc -l 2、 统计当前文件夹下目录个数 ls -l | grep "^-d" | wc -l 3、 统计当前文件夹下文件的个数、包括子文件夹里的 ls -lR | grep "^-" | …

C++标准库---partial_sort()partial_sort_copy()

局部排序&#xff1a;partial_sort(beg,sortEnd,end)partial_sort(beg,sortEnd,end,op)1.以上第一种形式&#xff0c;以operator< 对区间[beg,end)内的元素进行排序&#xff0c;使区间[beg,sortEnd)内的元素处于有序状态。2.以上第二中形式&#xff0c;运用二元判断式&#…

ntpdate设置

ntpdate设置 学习了&#xff1a;https://www.cnblogs.com/ibnode/p/3573302.html http://www.blogjava.net/spray/archive/2008/07/10/213964.html 在内网中需要修改ntp.conf到内容&#xff0c; server 127.127.1.0 fudge 127.127.1.0 stratum 8 在服务端启动/etc/init.d/ntpd…

装饰器叠加和有参装饰器

叠加多个装饰器 叠加多个装饰器 加载顺序&#xff08;outer函数的调用顺序&#xff09;&#xff1a;自下而上 执行顺序&#xff08;wrapper函数的调用顺序&#xff09;&#xff1a;从上到下 # 叠加多个装饰器 # 1. 加载顺序(outter函数的调用顺序):自下而上 # 2. 执行顺序(wra…

C++标准库---heap算法

heap算法就排序而言&#xff0c;heap是一种特别的元素组织方式&#xff0c;应用于heap排序法。heap可被视为一个序列式群集实作而成的二叉树&#xff0c;具有两大性质&#xff1a;1.第一个元素总是最大&#xff1b; 2.总是能够在对数时间内增加或移除一个元素。STL提供四种算法…

Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈

昨天&#xff0c;Go语言作者之一Robert Griesemer在官方博客发文称&#xff0c;Go 2已经选择出备选新特性提案&#xff0c;进入提案反馈阶段&#xff0c;他呼吁社区积极参与进来&#xff0c;和官方团队一起改进Go语言设计。 Go 2最开始是在2017年GopherCon上由Russ Cox宣布的&a…