#include<stdio.h>
void Merge(int low,int mid,int high,int *a,int *b);
void Merge_Sort(int low,int high,int *a,int *b);
int main()
{
int source[10000]={0},goal[10000]={0},i,n=10;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&source[i]);
}
Merge_Sort(0,n-1,source,goal);
for(i=0;i<n;i++)
{
printf("%d\n",goal[i]);
}
return 0;
}
void Merge(int low,int mid,int high,int *a,int *b)
{
int start1=low,start2=mid+1,n_arry=low;
while(start1<=mid&&start2<=high)
{
if(a[start1]<=a[start2]){
b[n_arry]=a[start1++];
}
else b[n_arry]=a[start2++];
n_arry++;
}
while(start1<=mid)
b[n_arry++]=a[start1++];
while(start2<=high)
b[n_arry++]=a[start2++];
/* for(start1=low;start1<=high;start1++)
printf("%d ",a[start1]);
printf("\n");
for(start1=low;start1<=high;start1++)
printf("%d ",b[start1]);
printf("\n");*/
for(start1=low;start1<=high;start1++)
a[start1]=b[start1];
}
void Merge_Sort(int low,int high,int *a,int *b)
{
//printf("进入Merge_Sort:%d %d\n",low,high);
int mid;
if(low<high)
{
mid=(low+high)/2;
Merge_Sort(low,mid,a,b);
Merge_Sort(mid+1,high,a,b);
Merge(low,mid,high,a,b);
void Merge(int low,int mid,int high,int *a,int *b);
void Merge_Sort(int low,int high,int *a,int *b);
int main()
{
int source[10000]={0},goal[10000]={0},i,n=10;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&source[i]);
}
Merge_Sort(0,n-1,source,goal);
for(i=0;i<n;i++)
{
printf("%d\n",goal[i]);
}
return 0;
}
void Merge(int low,int mid,int high,int *a,int *b)
{
int start1=low,start2=mid+1,n_arry=low;
while(start1<=mid&&start2<=high)
{
if(a[start1]<=a[start2]){
b[n_arry]=a[start1++];
}
else b[n_arry]=a[start2++];
n_arry++;
}
while(start1<=mid)
b[n_arry++]=a[start1++];
while(start2<=high)
b[n_arry++]=a[start2++];
/* for(start1=low;start1<=high;start1++)
printf("%d ",a[start1]);
printf("\n");
for(start1=low;start1<=high;start1++)
printf("%d ",b[start1]);
printf("\n");*/
for(start1=low;start1<=high;start1++)
a[start1]=b[start1];
}
void Merge_Sort(int low,int high,int *a,int *b)
{
//printf("进入Merge_Sort:%d %d\n",low,high);
int mid;
if(low<high)
{
mid=(low+high)/2;
Merge_Sort(low,mid,a,b);
Merge_Sort(mid+1,high,a,b);
Merge(low,mid,high,a,b);
}
//printf("退出Merge_Sort:%d %d\n",low,high);
}
//printf("退出Merge_Sort:%d %d\n",low,high);
}
遇到的问题:
1、递归的理解
2、对于辅助数组b应该把其值传给a,不然会出现问题。