#include<stdio.h>
#include<malloc.h>
#include"common.h"
void Merge(int a[],int p,int q,int r)
{
int l_len=q-p+1;
int r_len=r-q;
int *L= (int *)malloc((l_len+1)*sizeof(int));
int *R= (int *)malloc((r_len+1)*sizeof(int));
int i;
for(i=0;i<l_len;i++)
L[i]=a[p+i];
for(i=0;i<r_len;i++)
R[i]=a[q+i+1];
/*
* 实现方案1
* 此处做了一个处理,不需要处理尾部剩余的情况
L[l_len]=9999;
R[r_len]=9999;
int k;
i=0;
int j=0;
for(k=p;k<r+1;k++)
{
if(L[i]<=R[j])
a[k]=L[i++];
else
a[k]=R[j++];
}
*/
//实现方法2
int k=p;
i=0;
int j=0;
while(i<l_len&&j<r_len&&k<r+1)
{
if(L[i]<=R[j])
a[k++]=L[i++];
else
a[k++]=R[j++];
}
if(i!=l_len)//l数组还有剩余
while((i!=l_len)&&k<r+1) a[k++]=L[i++];
else
while((j!=r_len)&&k<r+1) a[k++]=R[j++];
}
void merge_sort(int a[],int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
Merge(a,p,q,r);
}
}
int main()
{
GetIntArray();
merge_sort(iarray,0,3);
Print(iarray,4);
return 0;
}
#include<malloc.h>
#include"common.h"
void Merge(int a[],int p,int q,int r)
{
int l_len=q-p+1;
int r_len=r-q;
int *L= (int *)malloc((l_len+1)*sizeof(int));
int *R= (int *)malloc((r_len+1)*sizeof(int));
int i;
for(i=0;i<l_len;i++)
L[i]=a[p+i];
for(i=0;i<r_len;i++)
R[i]=a[q+i+1];
/*
* 实现方案1
* 此处做了一个处理,不需要处理尾部剩余的情况
L[l_len]=9999;
R[r_len]=9999;
int k;
i=0;
int j=0;
for(k=p;k<r+1;k++)
{
if(L[i]<=R[j])
a[k]=L[i++];
else
a[k]=R[j++];
}
*/
//实现方法2
int k=p;
i=0;
int j=0;
while(i<l_len&&j<r_len&&k<r+1)
{
if(L[i]<=R[j])
a[k++]=L[i++];
else
a[k++]=R[j++];
}
if(i!=l_len)//l数组还有剩余
while((i!=l_len)&&k<r+1) a[k++]=L[i++];
else
while((j!=r_len)&&k<r+1) a[k++]=R[j++];
}
void merge_sort(int a[],int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
Merge(a,p,q,r);
}
}
int main()
{
GetIntArray();
merge_sort(iarray,0,3);
Print(iarray,4);
return 0;
}