Mergesort | A Helpful Line-by-Line Code Tutorial | Part 1

public class MergeSortTest {

	public static final int max = 10;
	
	public static void main(String[] args){
		
		int[] toSortArray = new int[max];
		//Required variables:
		
		
		//End - Required Variables
		
		for(int i = 0; i < max; i++){
			
			toSortArray[i] = (int) (Math.random()*100);
			
		}
		
		System.out.println("The array to be sorted is:");
		
		for(int i = 0; i < max; i++){
			
			System.out.print(" | " + toSortArray[i]);
		}
		System.out.println(" | ");
		
		//Beginning of the algorithm

		
			mergeSortHelper(toSortArray,0,max-1);
			
		
		// End of the algorithm
		
		System.out.println("The sorted array is: ");
		
		for(int i = 0; i < max; i++){
			
			System.out.print(" | " + toSortArray[i]);
		}
		
		System.out.println(" | ");
		
	}

	private static void mergeSortHelper(int[] toSortArray, int first, int last) {
		
		partition(toSortArray, first, last);
		
	}

	private static void partition(int[] toSortArray, int first, int last) {
		
		int mid = (first+last)/2;
		
		if(first<last){
		
			partition(toSortArray,first,mid);
			partition(toSortArray,mid+1,last);
			merge(toSortArray,first,mid,last);
		
		}
			
	}

	private static void merge(int[] toSortArray, int first, int mid, int last) {
		
		int[] newArray = new int[max];
		int i, j, k;
		
		i = first;
		j = mid + 1;
		k = 0;
		
		while(i <= mid && j <= last){
			
			if(toSortArray[i] < toSortArray[j]){
				
				newArray[k] = toSortArray[i];
				i++;
				k++;
				
			}else{
				
				newArray[k] = toSortArray[j];
				j++;
				k++;
				
			}
			
		}
		
		while(i <= mid){
			
			newArray[k] = toSortArray[i];
			i++;
			k++;
			
		}
		
		while(j <= last){
			
			newArray[k] = toSortArray[j];
			j++;
			k++;
			
		}
		
		for(i = first, j = 0; i <= last ; i++,j++){
			
			toSortArray[i] = newArray[j];
			
		}
		
	}
		
}