public class MergeSortMain { public static void main ( String[ ] args) { int [ ] arr = { 5 , 4 , 6 , 2 , 3 , 7 , 9 , 1 , 8 } ; sort ( arr) ; print ( arr) ; } static void sort ( int [ ] arr) { sort ( arr, 0 , arr. length - 1 ) ; } static void sort ( int [ ] arr, int leftBound, int rightBound) { if ( leftBound == rightBound) { return ; } int rightPoint = leftBound + ( rightBound - leftBound) / 2 ; sort ( arr, leftBound, rightPoint) ; sort ( arr, rightPoint + 1 , rightBound) ; merge ( arr, leftBound, rightPoint + 1 , rightBound) ; } static void merge ( int [ ] arr, int leftPoint, int rightPoint, int rightBound) { int [ ] temp = new int [ rightBound - leftPoint + 1 ] ; int mid = rightPoint - 1 ; int i = leftPoint; int j = rightPoint; int k = 0 ; while ( i <= mid && j <= rightBound) { if ( arr[ i] < arr[ j] ) { temp[ k] = arr[ i] ; k++ ; i++ ; } else { temp[ k] = arr[ j] ; k++ ; j++ ; } } while ( i <= mid) { temp[ k] = arr[ i] ; k++ ; i++ ; } while ( j <= rightBound) { temp[ k] = arr[ j] ; k++ ; j++ ; } for ( int l = 0 ; l < temp. length; l++ ) { arr[ leftPoint + l] = temp[ l] ; } } static void print ( int [ ] arr) { for ( int i : arr) { System. out. print ( i + " " ) ; } System. out. println ( " " ) ; }
}