Skip to content

Commit 1e2c592

Browse files
authored
Update MergeSort.java
Instead of copying the entire arr into aux during each merge operation, we can copy only the necessary portion. This reduces unnecessary copying and improves efficiency.
1 parent 308bdcf commit 1e2c592

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/main/java/com/thealgorithms/sorts/MergeSort.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,24 @@ private <T extends Comparable<T>> void doSort(T[] arr, int left, int right) {
4949
* increasing order.
5050
*/
5151
@SuppressWarnings("unchecked")
52-
private <T extends Comparable<T>> void merge(T[] arr, int left, int mid, int right) {
53-
int i = left;
54-
int j = mid + 1;
55-
System.arraycopy(arr, left, aux, left, right + 1 - left);
52+
private <T extends Comparable<T>> void merge(T[] arr, int left, int mid, int right) {
53+
// Copy only the necessary portion of arr into aux
54+
System.arraycopy(arr, left, aux, left, right - left + 1);
5655

57-
for (int k = left; k <= right; k++) {
58-
if (j > right) {
59-
arr[k] = (T) aux[i++];
60-
} else if (i > mid) {
61-
arr[k] = (T) aux[j++];
62-
} else if (less(aux[j], aux[i])) {
63-
arr[k] = (T) aux[j++];
64-
} else {
65-
arr[k] = (T) aux[i++];
66-
}
56+
int i = left;
57+
int j = mid + 1;
58+
59+
for (int k = left; k <= right; k++) {
60+
if (i > mid) {
61+
arr[k] = aux[j++];
62+
} else if (j > right) {
63+
arr[k] = aux[i++];
64+
} else if (less(aux[j], aux[i])) {
65+
arr[k] = aux[j++];
66+
} else {
67+
arr[k] = aux[i++];
6768
}
6869
}
6970
}
71+
72+
}

0 commit comments

Comments
 (0)