typedef int ElementType;
void Merge_sort(ElementType A[], int N)
{
ElementType *Item = (ElementType*)malloc(N*sizeof(ElementType));
if(Item)
{
Msort(A, Item, 0, N-1);
}
else
Error('空间不足');
}
void Msort(ElementType A[], ElementType Item[], int L, int R)
{
if(L < R)
{
int center = (L+R)/2;
Msort(A, Item, L, center);
Msort(A, Item, center+1, R);
Merge(A, Item, L, center+1, R);
}
}
void Merge(ElementType A[], ElementType Item[], int L, int R, int Rend)
{
int Lend = R-1;
int num = Rend-L+1;
int S = L;
while(L <= Lend && R <= Rend)
{
if(A[L] < A[R])
Item[S++] = A[L++];
else
Item[S++] = A[R++];
}
while(L <= Lend)
Item[S++] = A[L++];
while(R <= Rend)
Item[S++] = A[R++];
for(int i = 0; i < num; i++)
A[Rend-i] = Item[Rend-i];
}