Skip to content

Commit 4e1e4a1

Browse files
authored
Add recursive merge sort (TheAlgorithms#2446)
1 parent 3184ae0 commit 4e1e4a1

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

Sorts/MergeSortRecursive.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import java.util.Arrays;
2+
import java.util.ArrayList;
3+
import java.util.List;
4+
5+
public class MergeSortRecursive {
6+
7+
List<Integer> arr;
8+
9+
public MergeSortRecursive(List<Integer> arr) {
10+
this.arr = arr;
11+
}
12+
13+
public void mergeSort() {
14+
List<Integer> arrSorted = merge(arr);
15+
System.out.println(arrSorted);
16+
}
17+
18+
private static List<Integer> merge(List<Integer> arr) {
19+
20+
// base condition
21+
if (arr.size() <= 1) {
22+
return arr;
23+
}
24+
25+
int arrLength = arr.size();
26+
int half = arrLength / 2;
27+
List<Integer> arrA = arr.subList(0, half);
28+
List<Integer> arrB = arr.subList(half, arr.size());
29+
30+
// recursion
31+
arrA = merge(arrA);
32+
arrB = merge(arrB);
33+
34+
return sort(arrA, arrB);
35+
}
36+
37+
private static List<Integer> sort(List<Integer> unsortedA, List<Integer> unsortedB) {
38+
if (unsortedA.size() <= 0 && unsortedB.size() <= 0) {
39+
return new ArrayList<>();
40+
}
41+
if (unsortedA.size() <= 0) {
42+
return unsortedB;
43+
}
44+
if (unsortedB.size() <= 0) {
45+
return unsortedA;
46+
}
47+
if (unsortedA.get(0) <= unsortedB.get(0)) {
48+
List<Integer> newAl = new ArrayList<Integer>() {
49+
{
50+
add(unsortedA.get(0));
51+
}
52+
};
53+
newAl.addAll(sort(unsortedA.subList(1, unsortedA.size()), unsortedB));
54+
return newAl;
55+
} else {
56+
List<Integer> newAl = new ArrayList<Integer>() {
57+
{
58+
add(unsortedB.get(0));
59+
}
60+
};newAl.addAll(sort(unsortedA, unsortedB.subList(1, unsortedB.size())));
61+
return newAl;
62+
}
63+
}
64+
65+
}
66+
67+
class App {
68+
public static void main(String[] args) {
69+
MergeSortRecursive sort = new MergeSortRecursive(new ArrayList<>(Arrays.asList(4, 3, 1, 8, 5, 10, 0, 1, 4, 11, 8, 9)));
70+
sort.mergeSort();
71+
}
72+
}

0 commit comments

Comments
 (0)