前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法之归并排序

排序算法之归并排序

作者头像
Regan Yue
发布2021-09-16 15:11:04
3710
发布2021-09-16 15:11:04
举报
文章被收录于专栏:ReganYue's Blog

归并排序(英语:Merge sort,或mergesort),是建立在归并操作上的一种有效的排序算法,效率为 {\displaystyle O(n\log n)} {\displaystyle O(n\log n)}(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

代码语言:javascript
复制
#include
using namespace std;
void Merge(int a[],int s,int m,int e,int tmp[]){
	int pb=0;
	int p1=s,p2=m+1;
	while(p1<=m && p2<=e){
		if(a[p1]<a[p2])
			tmp[pb++] = a[p1++];
		else
			tmp[pb++] = a[p2++];
	}
	while(p1<=m)	tmp[pb++] = a[p1++];
	while(p2<=e)    tmp[pb++] = a[p2++];
	for(int i=0;i<e-s+1;++i)
		a[s+i] = tmp[i];
}
void MergeSort(int a[],int s,int e,int tmp[])
{
	if(s<e){
		int m = s+(e-s)/2;
		MergeSort(a,s,m,tmp);
		MergeSort(a,m+1,e,tmp);
		Merge(a,s,m,e,tmp);
	}
}

int a[10] = {10,9,8,7,6,5,4,3,2,1};
int b[10];
int main()
{
	int size=sizeof(a)/sizeof(int);
	MergeSort(a,0,size-1,b);
	for(int i=0;i<size;++i)
		cout << a[i] << "," << endl;
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档