//a是数组,tmp是缓冲区
void merge(int *a,int left,int mid,int right,int *tmp)
{
int i=left;
int j=mid+1;
int k=0;
while(i<=mid&&j<=right)
{
if(a[i]>a[j])
tmp[k++]=a[j++];
else(a[i]<a[j])
tmp[k++]=a[i++];
}
while(i<=mid)
tmp[k++]=a[i++];
while(j<=right)
tmp[k++]=a[j++];
}
void mergesort(int *a,int left,int right,int *tmp)
{
if(left>=right)
return ;
int mid=(left+right)/2;
mergrsort(a,left,mid,tmp); //对左边部分进行归并排序
mergesort(a,mid+1,right,tmp); //对右边部分进行归并排序
merge(a,left,mid,right,tmp); //将两部分数据进行归并
}
//归并排序
int main7()
{
int a[size]={9,8,3,4,0,7,5,8,2,7,1};
int len=sizeof(a)/sizeof(a[0]);
int tmp[10];
mergesort(a,0,len-1,tmp);
printA(a,len);
return 0;
}