/*************************************************************************
> File Name: merge.c
> Author: NULL
> Mail: 574889524@qq.com
> Created Time: Fri 10 Oct 2014 09:15:22 PM CST
************************************************************************/
#include<stdio.h>
#define MAX 1000000
void Merge(int *A,int p,int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
int L[n1+1],R[n2+1];
int i,j,k;
for(i = 0;i<n1;++i)
L[i] = A[p+i];
for(j = 0;j<n2;++j)
R[j] = A[q+j+1];
L[n1] = MAX;
R[n2] = MAX;
i = j = 0;
for(k = p; k<=r;k++){
if(L[i] <= R[j])
A[k] = L[i],i++;
else
A[k] = R[j],j++;
}
}
void MergeSort(int *a,int p,int r)
{
int q;
if(p<r){
q = (p+r)/2;
MergeSort(a,p,q);
MergeSort(a,q+1,r);
Merge(a,p,q,r);
}
}
int main()
{
int a[] = {1,7,4,10,2,3,5,9,11,80};
int i,iLength = sizeof(a)/sizeof(int);
MergeSort(a,0,iLength-1);
for(i = 0;i<iLength;++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}