分治之归并排序

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

//归并排序--分治 

void Merge(vector<int> &vecarr,int s,int m,int e,vector<int> &vecarrbk)
{
	//开始有序的往备胎里面放
	int m1=m+1,int ipos=0;
	int s1=s;
	while(s<=m&&m1<=e)
	{
		if(vecarr[s]<vecarr[m1])
		{
			vecarrbk[ipos++]=vecarr[s++];
		}
		else
		{
			vecarrbk[ipos++]=vecarr[m1++];
		}
	}
	while(s<=m)
	{
		vecarrbk[ipos++]=vecarr[s++];
	}
	while(m1<=e)
	{
		vecarrbk[ipos++]=vecarr[m1++];
	}
	for(int i=0;i<e-s1+1;++i)
	{
		vecarr[s1+i]=vecarrbk[i];
	}
}

void MergeSort(vector<int> &vecarr,int s,int e,vector<int> &vecarrbk)
{
	if(s<e)
	{
		int m=s+(e-s)/2;
		MergeSort(vecarr,s,m,vecarrbk);
		MergeSort(vecarr,m+1,e,vecarrbk);
		Merge(vecarr,s,m,e,vecarrbk);
	}
}

int main()
{
	int n=0;
	vector<int> vecarr;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int itemp=0;
		cin>>itemp;
		vecarr.push_back(itemp);
	}
	vector<int> vecarrbk(n);
	MergeSort(vecarr,0,vecarr.size()-1,vecarrbk);
	for(int m=0;m<vecarr.size();m++)
	{
		cout<<vecarr[m]<<" ";
	}
	cout<<endl;
	return 0;
}

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页