#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <iostream>
using namespace std;
#define N 10
#define M 100
void print(int *a)
{
for(int i=0; i<N; ++i)
{
printf("%3d", a[i]);
}
printf("\n");
}
void merge(int *a, int left, int mid, int right)
{
int *b = (int*)malloc(sizeof(int) * N);
memcpy(b, a, sizeof(int)*N);
int i,j,k;
for(i=left,j=mid+1,k=left; i<=mid && j<=right; ++k)
{
if(b[i] < b[j])
{
a[k] = b[i];
++i;
}
else
{
a[k] = b[j];
++j;
}
}
while(i <= mid)
{
a[k] = b[i];
++k;
++i;
}
while(j <= right)
{
a[k] = b[j];
++k;
++j;
}
free(b);
b=NULL;
}
void mergeSort(int *a, int left, int right)
{
if(left < right)
{
int mid = (left+right) / 2;
mergeSort(a, left, mid);
mergeSort(a, mid+1, right);
merge(a, left, mid, right);
}
}
int main() {
srand(time(NULL));
int *a = (int*)malloc(sizeof(int) * N);
for(int i=0; i<N; ++i)
{
a[i] = rand() % M;
}
print(a);
mergeSort(a, 0, N-1);
print(a);
free(a);
a = NULL;
return 0;
}