#include <stdio.h>
void Merge(int *a,int left ,int right,int rightend)
{
if((NULL == a))
{
return;
}
int temp[rightend+1];
int i = left;
int leftend = right - 1;
int len = rightend - left + 1;
while((left <= leftend) && (right <= rightend))
{
if(a[left ] <= a[right])
{
temp[i++] = a[left++];
}
else
{
temp[i++] = a[right++];
}
}
while(left <= leftend)
{
temp[i++] = a[left ++];
}
while(right <= rightend)
{
temp[i++] = a[right++];
}
for(i=0;i<len;i++,rightend--)
{
a[rightend] = temp[rightend];
}
}
void Mergesort(int *a,int left ,int right)
{
int mid = (left + right) / 2;
if(left < right)
{
Mergesort(a,left,mid);
Mergesort(a,mid+1,right);
Merge(a,left,mid+1,right);
}
}
int main(void)
{
int a[10] = {2,94,64,14,89,10,0,2,1,23};
int i;
for(i=0;i<10;i++)
{
printf(" %d ",a[i]);
}
Mergesort(a,0,9);
printf("\n");
for(i=0;i<10;i++)
{
printf(" %d ",a[i]);
}
}