@@ -6,34 +6,37 @@ public class MergeSort {
6
6
7
7
public static void main (String [] args ) {
8
8
9
- // Two previously ordered parts
9
+ // Unsorted array
10
10
Product [] products = {
11
- new Product ("product2" , 4 ),
12
11
new Product ("product3" , 5 ),
13
- new Product ("product5 " , 8 ),
12
+ new Product ("product2 " , 4 ),
14
13
new Product ("product6" , 9 ),
15
- new Product ("product1 " , 3 ),
14
+ new Product ("product5 " , 8 ),
16
15
new Product ("product4" , 6 ),
17
- new Product ("product7" , 9.3 ),
18
- new Product ("product8" , 10 )
16
+ new Product ("product1" , 3 ),
17
+ new Product ("product8" , 10 ),
18
+ new Product ("product7" , 9.3 )
19
19
};
20
20
21
- Product [] array = sort (products );
21
+ mergeSort (products , 0 , 1 , 2 );
22
+ mergeSort (products , 2 , 3 , 4 );
23
+ mergeSort (products , 4 , 5 , 6 );
24
+ mergeSort (products , 6 , 7 , 8 );
25
+ mergeSort (products , 0 , 4 , 8 );
26
+ // array = mergeSort(array, 0, 2, 4);
22
27
23
-
24
- System .out .println (Arrays .toString (array ));
28
+ System .out .println (Arrays .toString (products ));
25
29
26
30
}
27
31
28
- private static Product [] sort (Product [] products ) {
29
- int medium = products .length / 2 ;
30
- Product [] array = new Product [products .length ];
32
+ private static void mergeSort (Product [] products , int low , int medium , int high ) {
33
+ Product [] array = new Product [high -low ];
31
34
32
35
int current = 0 ;
33
- int left = 0 ;
36
+ int left = low ;
34
37
int right = medium ;
35
38
36
- while (left < medium && right < products . length ) {
39
+ while (left < medium && right < high ) {
37
40
if (products [left ].getPrice () < products [right ].getPrice ()) {
38
41
array [current ] = products [left ];
39
42
left ++;
@@ -44,7 +47,22 @@ private static Product[] sort(Product[] products) {
44
47
current ++;
45
48
}
46
49
47
- return array ;
50
+ while (left < medium ) {
51
+ array [current ] = products [left ];
52
+ left ++;
53
+ current ++;
54
+ }
55
+
56
+ while (right < high ) {
57
+ array [current ] = products [right ];
58
+ right ++;
59
+ current ++;
60
+ }
61
+
62
+ for (int i = 0 ; i < current ; i ++ ) {
63
+ products [low + i ] = array [i ];
64
+ }
65
+
48
66
}
49
67
50
68
}
0 commit comments