- import java.util.Arrays;
- public class MergeSort {
- public static void main(String[] args) {
- int[] data = { 2,4,0,7,1,8,3,6};
- mergesort(data, 0, data.length - 1);
- for(int i = 0; i < data.length; i++) {
- System.out.print(data[i] + " ");
- }
- }
- public static void mergesort(int[] data, int p, int r) {
- if (p < r) {
- int q = (p + r) / 2;
- mergesort(data, p, q);
- mergesort(data, q + 1, r);
- merge(data, p, q, r);
- }
- }
- private static void merge(int[] data, int p, int q, int r) {
- int[] left = Arrays.copyOfRange(data, p, q + 1);
- int[] right = Arrays.copyOfRange(data, q + 1, r + 1);
- int i = 0;
- int j = 0;
- int k = 0;
- while (k < r - p + 1) {
- if (i == left.length) {
- data[p + k] = right[j++];
- }
- else if (j == right.length) {
- data[p + k] = left[i++];
- }
- else if (left[i] < right[j]) {
- data[p + k] = left[i++];
- }
- else {
- data[p + k] = right[j++];
- }
- k++;
- }
- }
- }