1. import java.util.Arrays; 
  2.    
  3. public class MergeSort { 
  4.      
  5.     public static void main(String[] args) { 
  6.          
  7.         int[] data = {
    2,4,0,7,1,8,3,6}; 
  8.          
  9.         mergesort(data, 0, data.length - 1); 
  10.          
  11.         for(int i = 0; i < data.length; i++) { 
  12.             System.out.print(data[i] + " "); 
  13.         }        
  14.     }   
  15.    
  16.     public static void mergesort(int[] data, int p, int r) {   
  17.    
  18.         if (p < r) {   
  19.             int q = (p + r) / 2;   
  20.             mergesort(data, p, q);   
  21.             mergesort(data, q + 1, r);   
  22.             merge(data, p, q, r);   
  23.         }     
  24.     }   
  25.    
  26.     private static void merge(int[] data, int p, int q, int r) {   
  27.         int[] left = Arrays.copyOfRange(data, p, q + 1);   
  28.    
  29.         int[] right = Arrays.copyOfRange(data, q + 1, r + 1);   
  30.    
  31.         int i = 0;   
  32.         int j = 0;   
  33.         int k = 0;   
  34.         while (k < r - p + 1) {   
  35.             if (i == left.length) {   
  36.                 data[p + k] = right[j++];   
  37.             }   
  38.             else if (j == right.length) {   
  39.                 data[p + k] = left[i++];   
  40.             }   
  41.             else if (left[i] < right[j]) {   
  42.                 data[p + k] = left[i++];   
  43.             }   
  44.             else {   
  45.                 data[p + k] = right[j++];   
  46.             }   
  47.             k++;   
  48.         }     
  49.     } 
  50. }