first of all recursive sucks :)
second
Code:/#include <stdio.h>
#include <stdlib.h>
void merge(int *leftArr, int leftSize, int *rightArr, int rightSize, int *sortArr);
void mergeSort( int *Array, int n, int *temp );
int main()
{
int n , Array[100] , temp[100] ;
int i ;
scanf("%d", &n);
if( ( n <= 0 ) || ( n > 100 ) )
{
printf("error!\n");
return -1;
}
for( i = 0; i < n; i++ )
{
scanf("%d", &Array[i]);
}
mergeSort( Array, n, temp );
for(i=0;i<n;i++)
{
printf("%d ",Array[i]);
}
printf("\n");
getchar();
getchar();
getchar();
return 0;
}
void mergeSort( int *Array, int n, int *temp )
{
int leftArr[100] = {0}, rightArr[100] = {0}, rightSize,leftSize,temp_Size;
int i,j,temp_int;
if (n < 2)
return;
for (i=0; i<n; i++) temp[i] = Array[i];
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (temp[i] > temp[j]) { /*swap:*/
temp_int = temp[i];
temp[i] = temp[j];
temp[j] = temp_int;
} /* end of if */
leftSize = n/2;
rightSize = n - leftSize;
mergeSort( leftArr, leftSize, temp );
temp_Size = leftSize;
for( i = 0; i < leftSize; i++ )
leftArr[i] = Array[i];
for( i = 0; i < temp_Size; i++ )
{
temp[i] = Array[i];
}
//mergeSort( leftArr, leftSize, temp );
for( i = 0; i < temp_Size; i++ )
{
leftArr[i] = temp[i];
}
temp_Size = rightSize;
for( i = 0; i < temp_Size; i++ )
{
temp[i] = Array[leftSize+i];
}
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (temp[i] > temp[j]) { /*swap:*/
temp_int = temp[i];
temp[i] = temp[j];
temp[j] = temp_int;
} /* end of if */
mergeSort( rightArr, rightArr, temp );
for( i = 0; i < temp_Size; i++ )
rightArr[i] = temp[i];
merge( leftArr, leftSize, rightArr, rightSize, Array );
}
/* This function merges both sub arrays */
void merge(int *leftArr, int leftSize, int *rightArr, int rightSize, int *sortArr)
{
int i =0, j = 0, k = 0;
while ( ( i < leftSize )&& ( j < rightSize ) )
{
if ( leftArr[i] < rightArr[j] )
{
sortArr[k] = leftArr[i];
i++;
k++;
}
else
{
sortArr[k] = rightArr[j];
j++;
k++;
}
}
while(i<leftSize)
{
sortArr[k]= leftArr[i];
i++;
k++;
}
while(j<rightSize)
{
sortArr[k]= rightArr[j];
j++;
k++;
}
}

