【算法导论】归并排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/84452231
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <string> 
const int maxn=500000,INF=0x3f3f3f3f;
int L[maxn/2+2],R[maxn/2+2],a[maxn];
void merge(int a[],int left,int mid,int right)
{
    int n1=mid-left,n2=right-mid;
    for(int i=0;i<n1;i++)
        L[i]=a[left+i];
    for(int i=0;i<n2;i++)
        R[i]=a[mid+i];
    L[n1]=R[n2]=INF;
    int i=0,j=0;
    for(int k=left;k<right;k++)
    {
        if(L[i]<=R[j])
        {
        	count++; 
        	a[k]=L[i++];
		}
        else
        {
        	count++;
        	a[k]=R[j++];
		}
            
    }
}
void mergesort(int a[],int left,int right)
{
    if(left+1<right)
    {
        int mid=(left+right)/2;
        mergesort(a,left,mid);
        mergesort(a,mid,right);
        merge(a,left,mid,right);
    }
}

int main ()
{
	int len,i;
	while(scanf("%d",&len)!=EOF)
	{
		for(i=0;i<len;i++)
			scanf("%d",&a[i]); 
		mergesort(a,0,len);
		for(int i=0;i<len;i++)
		{
			if(i!=len-1)
			printf("%d ",a[i]);
			else
			printf("%d\n",a[i]);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/84452231