归并排序

#include<iostream>
using namespace std;
long long a[500010],arr[500010];//如果数组范围太小,记得改
int merge(int l,int r) {
	int p=(l+r)/2,i=0;
	if(l<r) {
		merge(l,p);
		merge(p+1,r);
		int m=l,n=p+1,k=l;
		while(m<=p&&n<=r) {
			if(a[m]<=a[n])
				arr[k++]=a[m++];
			else {
				arr[k++]=a[n++];
			}
		}
		while(m<=p)
			arr[k++]=a[m++];
		while(n<=r)
			arr[k++]=a[n++];
		for(int i=l; i<=r; i++)
			a[i]=arr[i];
	}
}
int main() {
	int n;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
		scanf("%d",&a[i]);
	merge(0,n-1);
	for(int i=0; i<n; i++)
		printf("%d ",a[i]);
	return 0;
}

 

posted @ 2022-04-17 15:33  半喜  阅读(38)  评论(0)    收藏  举报