#include<stdio.h>
int L[100],R[100];
void merge(int numbers[],int left,int mid,int right)
{
int n1=mid-left+1;
int n2=right-mid;
int i,j,k;
for(i=1;i<=n1;i++)
L[i]=numbers[left+i-1];
for(j=1;j<=n2;j++)
R[j]=numbers[mid+j];
// L[n1+1]=99999;
// R[n2+1]=99999;
i=1;
j=1;
for(k=left;k<=right;k++)
{
if ((i<(n1+1)) &&(j<(n2+1)))
{
if(L[i]<=R[j])
{
numbers[k]=L[i];
i++;
continue;
}
else
{
numbers[k]=R[j];
j++;
continue;
}
}
if((i>=(n1+1))&&(j<(n2+1)))
{ numbers[k]=R[j];
j=j+1;
continue;
}
if((i<(n1+1))&&(j>=(n2+1)))
{ numbers[k]=L[i];
i=i+1;
continue;
}
}
printf("left is %d right is %d \n",left,right);
for(i=0;i<8;i++)
{
printf( "inline_40 number[i] is %d\n",numbers[i]);
}
}
void mergeSort(int numbers[],int left,int right)
{
printf("left is %d\n",left);
printf("right is %d\n",right);
if(left <right)
{
int mid;
mid=(right+left)/2;
mergeSort(numbers,left,mid);
mergeSort(numbers,mid+1,right);
merge(numbers,left,mid,right);
}
}
int main(void)
{
int numbers[]={5,2,4,6,1,3,22,36};
int i=0;
mergeSort(numbers,0,7);
for( i=0;i<8;i++)
printf("%d ",numbers[i]);
return 0;
}
按元素的个数分配