1+ import java .util .Arrays ;
2+
3+ class MergeSort {
4+ private static void merge (int [] arr , int left , int middle , int right ) {
5+ int n1 = middle - left + 1 ;
6+ int n2 = right - middle ;
7+
8+ int [] leftArray = new int [n1 ];
9+ int [] rightArray = new int [n2 ];
10+
11+ System .arraycopy (arr , left , leftArray , 0 , n1 );
12+ for (int j = 0 ; j < n2 ; j ++) {
13+ rightArray [j ] = arr [middle + 1 + j ];
14+ }
15+
16+ int i = 0 , j = 0 ;
17+
18+ int k = left ;
19+ while (i < n1 && j < n2 ) {
20+ if (leftArray [i ] <= rightArray [j ]) {
21+ arr [k ] = leftArray [i ];
22+ i ++;
23+ } else {
24+ arr [k ] = rightArray [j ];
25+ j ++;
26+ }
27+ k ++;
28+ }
29+
30+ while (i < n1 ) {
31+ arr [k ] = leftArray [i ];
32+ i ++;
33+ k ++;
34+ }
35+
36+ while (j < n2 ) {
37+ arr [k ] = rightArray [j ];
38+ j ++;
39+ k ++;
40+ }
41+ }
42+
43+ private static void mergeSort (int [] arr , int left , int right ) {
44+ if (left < right ) {
45+ int middle = (left + right ) / 2 ;
46+
47+ mergeSort (arr , left , middle );
48+ mergeSort (arr , middle + 1 , right );
49+
50+ merge (arr , left , middle , right );
51+ }
52+ }
53+
54+ private static void mergeSort (int [] arr ) {
55+ mergeSort (arr , 0 , arr .length - 1 );
56+ }
57+
58+ public static void main (String [] args ) {
59+ int [] arr = { 1 , 5 , 0 , -8 , 2 , 1 , 0 , -2 };
60+
61+ System .out .println ("Unsorted array: " + Arrays .toString (arr ));
62+
63+ mergeSort (arr );
64+
65+ System .out .println ("Sorted array: " + Arrays .toString (arr ));
66+ }
67+ }
0 commit comments