Skip to content

Commit de7d928

Browse files
ramona.burgerabranhe
authored andcommitted
add non-recursive MergeSort
1 parent 7857f97 commit de7d928

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

sorting/MergeSortNonRecursive.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
public class NonRecursiveMergeSort<T extends Comparable<T>> {
2+
3+
public T[] MergeSort(T[] M) {
4+
5+
int length = M.length;
6+
int size = 1;
7+
int p;
8+
while (size < length) {
9+
p = -1;
10+
while (p + size < length) {
11+
int left = p + 1;
12+
int right = left + size - 1;
13+
if (right + size <= length) {
14+
p = right + size;
15+
} else {
16+
p = length;
17+
}
18+
merge(M, left, right, p);
19+
}
20+
size = size * 2;
21+
}
22+
23+
return M;
24+
25+
}
26+
27+
28+
public T[] merge(T[] M, int left, int right, int p) {
29+
int i = left;
30+
int j = right + 1;
31+
int k = left;
32+
T[] M2 = M.clone();
33+
for (int n = 0; n < M.length; n++) {
34+
M2[n] = null;
35+
}
36+
while (i <= right && j <= p) {
37+
if (M[i].compareTo(M[j]) <= 0) {
38+
M2[k] = M[i];
39+
i = i + 1;
40+
} else {
41+
M2[k] = M[j];
42+
j = j + 1;
43+
}
44+
k = k + 1;
45+
}
46+
for (int h = i; h <= right; h++) {
47+
M[k + (h - i)] = M[h];
48+
}
49+
for (int h = left; h <= (k - 1); h++) {
50+
M[h] = M2[h];
51+
}
52+
return M;
53+
54+
}
55+
56+
}

0 commit comments

Comments
 (0)