#include <iostream>
using namespace std;
template <typename T>
void Merge(T B[],T C[],T A[],int m,int n)
{
int i=0,j=0,k=0;
while (i<m&&j<n)
{
if (B[i]<C[j])
{
A[k++]=B[i++];
}
else
{
A[k++]=C[j++];
}
}
if (i==m)
{
for (;j<n;j++)
{
A[k++]=C[j];
}
}
else
{
for (;i<m;i++)
{
A[k++]=B[i];
}
}
}
template <typename T>
int MergeSort(T A[],const int n)
{
if (n>1)
{
int mid=(n/2);
int i;
//T B[mid];
//T C[n-mid];
T *B=new T[mid];
T *C=new T[n-mid];
for( i=0;i<mid;i++)
{
B[i]=A[i];
}
for (;i<n;i++)
{
C[i-mid]=A[i];
}
MergeSort(B,mid);
MergeSort(C,n-mid);
Merge(B,C,A,mid,n-mid);
return 0;
}
return (-1);
}
int _tmain(int argc,_TCHAR* argv[])
{
int a[10]={5,6,1,8,2,6,7,4,10,3};
MergeSort(a,10);
cout<<"after mergesort"<<endl;
for (int i=0;i<(sizeof(a)/sizeof(int));i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
递归实现