归并排序

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;							//100005 
int a[MAXN], temp[MAXN], n;

void MergeSort(int l, int r)					//再次提醒函数慎用inline,不清楚能不能用就不要用 
{
	int mid=(l+r)>>1; 
    if(l==r)	return;
    MergeSort(l, mid);
	MergeSort(mid+1, r);
    int i=l, j=mid+1, k=l;						//开始2路归并 
    while(i<=mid && j<=r)
    {
        if(a[i]<=a[j])		temp[k++]=a[i++];
        else				temp[k++]=a[j++];
    }
    while(i<=mid)			temp[k++]=a[i++];
    while(j<=r)				temp[k++]=a[j++];
    for(int i=l; i<=r; i++)	a[i]=temp[i];
    return;
}

int main(void)
{
    scanf("%d", &n);
    for(int i=1; i<=n; i++)	scanf("%d", &a[i]);
    MergeSort(1, n);
    for(int i=1; i<=n; i++)	printf("%d ", a[i]);
    return 0;
}
posted @ 2019-03-04 11:23  LFYZOI题解  阅读(156)  评论(0编辑  收藏  举报