1
+ import java .io .*;
2
+ import java .util .*;
3
+ class MergeSort {
4
+
5
+ Scanner sc = new Scanner (System .in );
6
+
7
+ public static void main (String args [])throws IOException {
8
+ MergeSort ob = new MergeSort ();
9
+ int n = ob .InputSizeOfArray ();
10
+ if (n ==-1 ) return ;
11
+ int arr [] = new int [n ];
12
+ int flag = ob .InputArrayElements (n ,arr );
13
+ if (flag ==-1 ) return ;
14
+ long sT = System .nanoTime ();
15
+ //ob.DisplayArrayElements(n,arr);
16
+ ob .MergeSortRoutine (n ,arr );
17
+ //System.out.println("The Sorted Array is:");
18
+ //ob.DisplayArrayElements(n,arr);
19
+ long eT = System .nanoTime ();
20
+ float time = eT -sT ;
21
+ System .out .println ("Elapsed Time: " +(eT -sT )+"ns " +(eT -sT )/1000 +"us " +(eT -sT )/100000 +"ms " +(time )/1000000000 +"s" );
22
+ }
23
+
24
+ public void MergeSortRoutine (int n , int arr []){
25
+ int lo = 0 ;
26
+ int hi = n -1 ;
27
+ if (lo <hi ){
28
+ int mid = (int )(Math .floor ((lo +hi )/2 ));
29
+ int LArr [] = new int [mid +1 ];
30
+ int RArr [] = new int [n -(mid +1 )];
31
+ PopulateArray (LArr ,RArr ,arr ,mid +1 );
32
+
33
+ MergeSortRoutine (mid +1 ,LArr );
34
+ MergeSortRoutine (n -(mid +1 ),RArr );
35
+
36
+ Merge (LArr ,RArr ,arr );
37
+
38
+ }
39
+ }
40
+
41
+ public void Merge (int LArr [], int RArr [], int newArr []){
42
+ int i =0 ,j =0 ,k =0 ;
43
+ while (i < LArr .length && j < RArr .length ){
44
+ if (LArr [i ]<RArr [j ]){
45
+ newArr [k ]=LArr [i ];
46
+ i ++;
47
+ }
48
+ else {
49
+ newArr [k ]=RArr [j ];
50
+ j ++;
51
+ }
52
+ k ++;
53
+ }
54
+ while (i <LArr .length ){
55
+ newArr [k ]=LArr [i ];
56
+ i ++;
57
+ k ++;
58
+ }
59
+ while (j <RArr .length ){
60
+ newArr [k ]=RArr [j ];
61
+ j ++;
62
+ k ++;
63
+ }
64
+ }
65
+
66
+ public void PopulateArray (int LArr [], int RArr [], int arr [],int mid ){
67
+ for (int i =0 ;i <LArr .length ;i ++)
68
+ LArr [i ]=arr [i ];
69
+ for (int j =mid ;j <arr .length ;j ++)
70
+ RArr [j -mid ]=arr [j ];
71
+ }
72
+
73
+ public int InputSizeOfArray (){
74
+ System .out .print ("\n Enter the size of the array: " );
75
+ int n = sc .nextInt ();
76
+ if (n <=0 ){
77
+ System .out .println ("No elements in array. Exiting..." );
78
+ return -1 ;
79
+ }
80
+ return n ;
81
+ }
82
+
83
+ public int InputArrayElements (int n , int arr []){
84
+
85
+
86
+ for (int i =0 ;i <n ;i ++)
87
+ arr [i ]=(int )(100000 *Math .random ());
88
+ return 0 ;
89
+
90
+ /*
91
+ System.out.println("Enter "+n+" elements into the array");
92
+ for(int i=0;i<n;i++){
93
+ try{
94
+ arr[i]=sc.nextInt();
95
+ }
96
+ catch(InputMismatchException e)
97
+ {
98
+ System.out.println("Result not an integer, exiting...");
99
+ return -1;
100
+ }
101
+ }
102
+ return 0;
103
+ */
104
+ }
105
+
106
+ public void DisplayArrayElements (int n , int arr []){
107
+ for (int i =0 ;i <n ;i ++)
108
+ System .out .print (arr [i ]+" " );
109
+ System .out .println ();
110
+ }
111
+
112
+
113
+ }
0 commit comments