STL 源代码剖析 算法 stl_algo.h — merge sort「建议收藏」

STL 源代码剖析 算法 stl_algo.h — merge sort

大家好,又见面了,我是全栈君。

本文为senlie原创。转载请保留此地址:http://blog.csdn.net/zhengsenlie


merge sort

———————————————————————-

描写叙述:归并排序

思路:

1.将区间对半切割

2.对左、右段分别排序

3.利用inplace_merge将左、右段合并成为一个完整的有序序列

复杂度:O(nlog n)

源代码:

template<class BidirectionalIter>
void mergesort(BidirectionalIter first, BidirectionalIter last){
	typename iterator_traits<BidirectionalIter>::diference_type n = distance(first,last);
	if(n == 0 || n == 1) return ;
	else{
		BidirectionalIter mid = first + n / 2;
		mergesort(first, mid);
		mergesort(mid, last);
		inplace_merge(first, mid, last);
	}
}

演示样例:

int main()
{

	int a[]={3,8,0,6,7,4,2,1,9,3,1,8,3,9,2,0,9};
	int *a_end=a+sizeof a/sizeof(int);
	

	std::cout<<"a before mergesort: ";
	std::for_each(a, a_end, print<int>);
	std::cout<<'\n';

	mergesort(a, a_end);

	std::cout<<"a after mergesort: ";
	std::for_each(a, a_end, print<int>);
	std::cout<<'\n';

	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115937.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 三菱modbusrtu通讯协议报文_modbus通讯协议详解

    三菱modbusrtu通讯协议报文_modbus通讯协议详解点击箭头处“工业之家”,选择“关注公众号”!modbus通讯协议详解Modbus协议可以说是工业自动化领域应用最为广泛的通讯协议,因为它的开放性、可扩充性和标准化使它成为一个通用工业标准。有了它,不同厂商的产品可以简单可靠的接入网络,实现系统的集中监控,分散控制功能。目前Modbus规约主要使用的是ASCII,RTU,TCP等,并没有规定物理层。目前Modbus常用的接口形式主要有R…

  • Quartz定时任务的组件API[通俗易懂]

    title:Quartz技术(二)-Quartz组件APIcategories:后端tags:定时任务本讲主要说明Quartz中重要的几个组件的API。Scheduler(调度器)Scheduler的生命期,从SchedulerFactory创建它时开始,到Scheduler调用shutdown()方法时结束;Scheduler被创建后,可以增加、删除和列举Job和Tri…

  • 【离散数学】单射、满射和双射的定义、区别

    【离散数学】单射、满射和双射的定义、区别满射:对任意b,存在a满足f(a)=b~即:值域y是满的,每个y都有x对应,不存在某个y没有x对应的情况~单射:(one-to-onefunction)一对一函数,x不同则y不同~即:没有一个x对应两个y,也没有一个y有对应两个x~双射:既是满射,也是单射~即:每个y都有x对应,而且都是一一对应~…

  • matlab产生高斯白噪声

    matlab产生高斯白噪声函数介绍matlab里和随机数有关的函数:(1)rand:产生均值为0.5、幅度在0~1之间的伪随机数。(2)randn:产生均值为0、方差为1的高斯白噪声。(3)randperm(n):产生1到n的均匀分布随机序列。(4)normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵。rand:返回一个在区间(0,1)内均匀分布的随机数。rand(n):生成0到1之间的n阶(n×n)随机数方阵。rand(m,n):生成0到1之间的m×n的随机数矩阵。

    2022年10月21日
  • web高级前端面试_前端js面试题

    web高级前端面试_前端js面试题JavaScript高级相关笔试面试题38道

  • 数据库设计规范

    数据库设计规范数据库的重要性不言而喻。对程序员来说跟数据库打交道更是家常便饭。数据库给开发带来了巨大的便利。我们或多或少的知道一些数据库设计规范,但并不全面。今天我就简单整理一下,帮自己做个总结梳理,也希望可以帮到小伙伴们。数据库设计规范包括命名规范、库表基础规范、字段规范、索引规范和SQL设计规范。1.命名规范1.1库名、表名、字段名禁止使用MySQL保留字。1.2库名、表名、字段名使…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号