Skip to content

Instantly share code, notes, and snippets.

@agustarc
Last active December 21, 2016 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agustarc/0a2ee9a069fdee20691a686beb23972f to your computer and use it in GitHub Desktop.
Save agustarc/0a2ee9a069fdee20691a686beb23972f to your computer and use it in GitHub Desktop.
public class MergeSort {
private static int[] sorted;
public static void mergeSort(int[] arr) {
sorted = new int[arr.length];
mergeSort(arr, 0, arr.length - 1);
}
private static void mergeSort(int[] arr, int begin, int end) {
if (begin < end) {
final int middle = (begin + end) / 2;
mergeSort(arr, begin, middle);
mergeSort(arr, middle + 1, end);
merge(arr, begin, middle, end);
}
}
private static void merge(int[] arr, int begin, int middle, int end) {
int i = begin;
int j = middle + 1;
int k = begin;
while (i <= middle && j <= end) {
if (arr[i] <= arr[j]) {
sorted[k] = arr[i++];
} else {
sorted[k] = arr[j++];
}
k++;
}
int t;
if (i > middle) {
for (t = j; t <= end; t++, k++) {
sorted[k] = arr[t];
}
} else {
for (t = i; t <= middle; t++, k++) {
sorted[k] = arr[t];
}
}
for (t = begin; t <= end; t++) {
arr[t] = sorted[t];
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment