#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(L[i]<=R[j])
{
numbers[k]=L[i];
i++;
}
else
{
numbers[k]=R[j];
j++;
}
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;
}
使用2个 正无穷的哨兵元素