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;
}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2022IDEA专业版激活码【2022最新】「建议收藏」

    (2022IDEA专业版激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~4KDDGND3CI-eyJsaWNlb…

    2022年4月1日
    1.1K
  • java跟python优势_当前Java与Python相比还有哪些优势「建议收藏」

    java跟python优势_当前Java与Python相比还有哪些优势「建议收藏」首先,Java语言与Python语言都是非常流行的全场景编程语言,在很多开发场景下,既可以使用Java语言,也可以采用Python语言,比如Web开发、大数据开发等等。随着近几年大数据和人工智能领域的热度越来越高,Python语言的上升趋势还是比较明显的。采用Python构建的分析系统虽然Python语言得到了越来越多的关注,但是Java语言还是有很多固有优势的,主要体现在以下三个方面:第一:性能…

    2022年9月28日
    1
  • Java到底好不好学「建议收藏」

    Java到底好不好学「建议收藏」Java到底好不好学答案是:不难学。很多人都以为编程是个很高深的东西,其实不然,真正学习了你会发现编程比你高中学的数理化要简单的多。说它不难呢,如果学深入了,还算有很多东西要学习,比如你学Java,后面可能要了解计算机组成原理、操作系统等底层知识,当然这些知识只要用心去了解,还是我们一般人都可以理解的。Java学习途径说到一门知识或技能好不好用,学习途径是很重要的,如果没有学习途径,有的时候一个很简单的知识都要花很久搞明白。我们是踩在巨人的肩上的,老一辈人给我留下了很多宝贵知识以及经验,..

    2022年7月7日
    22
  • icem网格划分如何给内部面网格_icem结构化网格划分 ICEM里面设置一下就可以自动划分网格,为什么要用块?…

    icem网格划分如何给内部面网格_icem结构化网格划分 ICEM里面设置一下就可以自动划分网格,为什么要用块?…ICEM里面设置一下就可以自动划分网格,为什么要用块?块划分方法是结构化网格划分,相比于非结构化网格有较规则形状的网格质量可以做的很高,进行数值计算时也可以采用更高阶的格式(非结构化最高二阶精度)。图中网格划分方法可以先做出长方体,然后在其侧面拉伸出来小圆柱,也可以这4个分开做网格,最后用interface连接起来即可icem中想要将模型划分成几个部分,分别应用不同的网格划分,该怎么做?是非结构化…

    2022年5月25日
    41
  • 删除卡巴斯基激活码

    删除卡巴斯基激活码

    2021年7月24日
    56
  • React 路由—基本使用「建议收藏」

    React 路由—基本使用「建议收藏」一:安装运行npmireact-router-dom安装react路由依赖项创建一个App.js根组件,并在根组件中,按需导入路由需要的三个组件HashRouter:表示路由的包裹

    2022年8月2日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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