@@ -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