Skip to content

Instantly share code, notes, and snippets.

@pori
Last active August 29, 2015 14:05
Show Gist options
  • Save pori/b30a540dacb334199b62 to your computer and use it in GitHub Desktop.
Save pori/b30a540dacb334199b62 to your computer and use it in GitHub Desktop.
A Mergesort algorithm for quick usage.
import java.util.Arrays;
public class Mergesort {
public static void main(String[] args) {
int[] set = { 3, 6, 1, 5, 12, 10 };
System.out.println("Before: " + Arrays.toString(set));
Mergesort.sort(set);
System.out.println("After: " + Arrays.toString(set));
}
public static void sort(int[] set) {
int[] tmp = new int[ set.length ];
Mergesort.sort(set, tmp, 0, set.length);
}
public static void sort(int[] set, int[] tmp, int left, int right) {
if (right - left < 2) {
return;
}
int middle = left + (right - left) / 2;
Mergesort.sort(set, tmp, left, middle);
Mergesort.sort(set, tmp, middle, right);
Mergesort.merge(set, tmp, left, middle, right);
Mergesort.copy(set, tmp, left, right);
}
public static void merge(int[] set, int[] tmp, int left, int middle, int right) {
int i = left, j = middle;
for (int k = left; k < right; k++) {
if (i < middle && (j >= right || set[i] <= set[j])) {
tmp[k] = set[i];
i++;
}
else {
tmp[k] = set[j];
j++;
}
}
}
public static void copy(int[] a, int[] b, int left, int right) {
for(int i = left; i < right; i++) {
a[i] = b[i];
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment