/*crate A new array to put the elements sorted*/
void mergesort (int a[], int n) {
int *tmparray;
Tmparray = (int*) malloc (n*sizeof (int));
if (tmparray! = NULL) {
Msort (A, Tmparray, 0, n-1);
Free (Tmparray);
}
}
//we could utilize the stack to understand the Sort and Merge
void Msort (int a[], int tmparray[], int left, int. right) {
int center;
if (left < right) {
Center = (left + right)/2;
Msort (A, Tmparray, left, center);//Sort the left side
Msort (A, Tmparray, center + 1, right);//Sort the right side
Merge (A, tmparray,left,center + 1, right);
}
}
/*two sorted array can be merged easily*/
void Merge (int a[], int tmparray[], int left, int mid, Int. right) {
int i,tmp,numelements;
TMP = left;
numelements = Right-left + 1;
while (left <= mid-1, mid <= right) {
if (A[left] <= A[mid])
tmparray[tmp++] = a[left++];
Else
tmparray[tmp++] = a[mid++];
}
while (left <= mid-1)
tmparray[tmp++] = a[left++];
While (Mid <= right)
tmparray[tmp++] = a[mid++];
for (i = 0; i < numelements; i++, right--)
A[right] = Tmparray[right];
}
Data structure and algorithm--merge sort