#include<iostream>
using namespace std;
void MergeSort(int a[],int left,int right);
void Merge(int c[],int d[],int l,int m,int r);
void Copy(int a[],int b[],int left,int right);
main()
{
cout<<"请输入一组数:"<<endl;
int a[4],b[4];
for(int i=0;i<4;i++)
cin>>a[i];
MergeSort(a,0,3);
for(int i=0;i<4;i++)
cout<<a[i]<<" ";
}
void MergeSort(int a[],int left,int right)
{
static int b[4];
if(left<right)//至少有两个个元素
{
int i=(left+right)/2;//取中点
MergeSort(a,left,i);
MergeSort(a,i+1,right);
Merge(a,b,left,i,right);//合并到数组b
Copy(a,b,left,right);//复制回数组a
}
}
void Merge(int c[],int d[],int l,int m,int r)//合并c[l:m]和c[m+1:r]到d[l: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 p=j;p<=r;p++)
d[k++]=c[p];
}
else
{
for(int q=i;q<=m;q++)
d[k++]=c[q];
}
}
}
void Copy(int a[],int b[],int left,int right)
{
for(int i=left;i<=right;i++)
{
a[i]=b[i];
cout<<b[i]<<endl;
}
}
总觉得好像是b[]的定义有问题,如果两个数结果是对的,但是3个或者4个数就有问题,帮忙调试一下看看可以吗