diff --git a/budd-common/src/main/java/io/github/ehlxr/algorithm/sort/MergeSort.java b/budd-common/src/main/java/io/github/ehlxr/algorithm/sort/MergeSort.java index 9c5f5be..b7ff231 100644 --- a/budd-common/src/main/java/io/github/ehlxr/algorithm/sort/MergeSort.java +++ b/budd-common/src/main/java/io/github/ehlxr/algorithm/sort/MergeSort.java @@ -34,6 +34,7 @@ public class MergeSort { public static void main(String[] args) { int[] arrs = new int[]{3, 2, 5, 7, 1, 9}; System.out.println(Arrays.toString(sort(arrs))); + System.out.println(Arrays.toString(sort2(arrs))); } public static int[] sort(int[] arrs) { @@ -69,4 +70,42 @@ public class MergeSort { return result; } + + + public static int[] sort2(int[] a) { + if (a == null || a.length <= 1) { + return a; + } + + return merge2(sort2(Arrays.copyOfRange(a, 0, a.length / 2)), + sort2(Arrays.copyOfRange(a, a.length / 2, a.length))); + } + + public static int[] merge2(int[] a, int[] b) { + int[] r = new int[a.length + b.length]; + + int i = 0; + int j = 0; + int m = 0; + while (i < a.length || j < b.length) { + if (i >= a.length) { + r[m++] = b[j++]; + continue; + } + + if (j >= b.length) { + r[m++] = a[i++]; + continue; + } + + if (a[i] < b[j]) { + r[m++] = a[i++]; + } else { + r[m++] = b[j++]; + } + } + + + return r; + } }