template<class T> void MergeSort(T a[],int left,int right);//leif为左边界,right为右边界
template<class T>void Merge(T c[],T d[],int l,int m,int r); //将合并好的两部分搬到b数组.再用copy函数搬回去...
template<class T>void Copy(T a[],T b[],int l,int r);
//归并排序几天后记得重写
int main()
{
int const n(5);
int a[n];
cout<<"Input "<< n <<" numbers please:";
for(int i=0;i<n;i++)
cin>>a[i];
MergeSort(a,0,n-1);
cout<<"The sorted array is"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<",";
cout<<endl;
}
template<class T>
void MergeSort(T a[],int left,int right)
{
if(left < right) {//逻辑能力不强的表现,没有对N进行检查
int i = (right + left)/2;
T*b=new T();
MergeSort(a, left, i);
MergeSort(a, i+1, right);
Merge(a, b, left, i, right);
Copy(a,b,left,right);
}
}
template<class T>
void Merge(T c[],T d[],int l,int m,int r)
{
int i = l, j = m+1, k = l;
while(i <= m && j <= r)
{
if(c[i] <= c[j])d[k++]=c[i++];
else d[k++]=c[j++];
}
if(i > m)
{
for(int q = j; q <= r; q ++)
d[k++] = c[q];
}
else
for(int q = i; q <= m; q ++)
d[k++] = c[q];
}
template<class T>
void Copy(T a[],T b[],int l,int r)
{
for(int i=l;i<=r;i++)
a[i]=b[i];
}