private static void merge(int low, int middle, int high) {
		
		int[][] helper = new int[data.length][data[1].length];
				
	    // Copy both parts into the helper array
	    for (int i = low; i <= high; i++) {
	      helper[i] = data[i];
	    }

	    int i = low;
	    int j = middle + 1;
	    int k = low;
	    
	    // Copy the smallest values from either the left or the right side back
	    // to the original array
	    while (i <= middle && j <= high) {
	    	
	    	if (helper[i][2] <= helper[j][2]) {
	        
	    	  data[k] = helper[i];
	    	  i++;
	    	} else {
	    	  data[k] = helper[j];
	    	  j++;
	    	}
	    	k++;
	    }
	    
	    // Copy the rest of the left side of the array into the target array
	    while (i <= middle) {
	    	data[k] = helper[i];
	    	k++;
	    	i++;
	    }
	    
	}