import java.util.*;
public class MergeSort
{
public static void main( String[] args )
{
int[] arrays = new int[32];
for( int i = 0; i < 32; i++ )
{
arrays[ i ] = ( 32 - i ) * 2;
}
for( int i = 0; i < 32; i++ )
{
System.out.println( i + "th : " + arrays[i] );
}
mergeSort( 32, arrays );
for( int i = 0; i < 32; i++ )
{
System.out.println( i + "th : " + arrays[i] );
}
}
public static void mergeSort( int n, int[] array )
{
if ( n > 1 )
{
int mid;
int leftSize = 0, rightSize = 0;
int[] U = null;
int[] V = null;
leftSize = (int) Math.floor( n / 2 );
rightSize = n - leftSize;
U = new int[ leftSize ];
U = Arrays.copyOfRange( array, 0, leftSize );
V = new int[ rightSize ];
V = Arrays.copyOfRange( array, leftSize, n );
mergeSort( leftSize, U );
mergeSort( rightSize, V );
merge( leftSize, rightSize, U, V, array );
}
}
private static void merge( int h, int m, int[] U, int[] V, int[] array )
{
int i = 0, j = 0, k = 0;
while (i < h && j < m)
{
if ( U[ i ] < V[ j ] )
{
array[ k ] = U[ i++ ];
} else
{
array[ k ] = V[ j++ ];
}
++k;
}
if( i > h )
{
for( int a = k; a < array.length; a++ )
{
array[ a ] = V[ j++ ];
}
}
else
{
for( int a = k; a < array.length; a++ )
{
array[ a ] = U[ i++ ];
}
}
}
}