Skip to content

Commit df439f7

Browse files
committed
implement merge sort challenge
1 parent 98bd461 commit df439f7

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package codechallenge.easy.array;
2+
3+
/*
4+
Implement merge sort
5+
*/
6+
7+
import me.premaseem.MyUtils;
8+
import org.junit.Test;
9+
10+
public class MergeSortChallenge {
11+
12+
// Test Driven Development by Aseem Jain
13+
@Test
14+
public void test() {
15+
int a2[] = {10, 30, 190, 120, 110, 50, 7};
16+
17+
mergeSort(a2, 0, a2.length - 1);
18+
MyUtils.isArrSorted(a2);
19+
}
20+
21+
22+
void mergeSort(int[] a, int l, int r) {
23+
if (r > l) {
24+
int m = (l + r) / 2;
25+
mergeSort(a,l,m);
26+
mergeSort(a,m+1,r);
27+
realMerge(a, l, m, r);
28+
}
29+
}
30+
31+
void realMerge(int[] a, int l, int m, int r) {
32+
33+
// find out array size
34+
int las = m - l + 1;
35+
int ras = r - m;
36+
int[] la = new int[las];
37+
int[] ra = new int[ras];
38+
39+
// populate elements
40+
41+
for (int i = 0; i < las; i++) {
42+
la[i] = a[l + i];
43+
}
44+
45+
for (int i = 0; i < ras; i++) {
46+
ra[i] = a[m + 1 + i];
47+
}
48+
49+
// merge and put it on real array
50+
int i1 = 0, i2 = 0;
51+
52+
for (int i = l; i <= r; i++) {
53+
int lav = Integer.MAX_VALUE;
54+
int rav = Integer.MAX_VALUE;
55+
56+
if (i1 < las) {
57+
lav = la[i1];
58+
}
59+
if (i2 < ras) {
60+
rav = ra[i2];
61+
}
62+
63+
if (lav < rav) {
64+
a[i] = lav;
65+
i1++;
66+
} else {
67+
a[i] = rav;
68+
i2++;
69+
}
70+
}
71+
}
72+
73+
}

0 commit comments

Comments
 (0)