I have the following insertion sort algorithm but I have a problem understanding the recursive method mergeSort
.
public class MergeSort {
public static void main(String[] args) {
int[]intArray = {20, 35, -15, 7, 55, 1, -22};
mergeSort(intArray , 0 , intArray.length);
for(int i = 0 ; i < intArray.length ; i++) {
System.out.println(intArray[i]);
}
}
public static void mergeSort(int[] input, int start, int end) {
System.out.println("start = " + start + " ||" + " end = " + end + " ||" + " mid = " +((start+end)/2));
if (end - start < 2) {
return;
}
int mid = (start + end) / 2;
mergeSort(input, start, mid);
mergeSort(input, mid, end );
merge(input, start, mid, end);
}
public static void merge(int[] input, int start, int mid, int end) {
if (input[mid - 1] <= input[mid]) {
return;
}
int i = start;
int j = mid;
int tempIndex = 0;
int[] temp = new int[end -start];
while (i < mid && j < end) {
temp[tempIndex++] = input[i] <= input[j] ? input[i++] : input[j++];
}
System.arraycopy(input, i, input, start + tempIndex, mid-i);
System.arraycopy(temp, 0, input, start, tempIndex);
}
}
The output is:
start = 0 || end = 7 || mid = 3
start = 0 || end = 3 || mid = 1
start = 0 || end = 1 || mid = 0
start = 1 || end = 3 || mid = 2
start = 1 || end = 2 || mid = 1
start = 2 || end = 3 || mid = 2
start = 3 || end = 7 || mid = 5
start = 3 || end = 5 || mid = 4
start = 3 || end = 4 || mid = 3
start = 4 || end = 5 || mid = 4
start = 5 || end = 7 || mid = 6
start = 5 || end = 6 || mid = 5
start = 6 || end = 7 || mid = 6
-22 , -15 , 1 , 7 , 20 , 35 , 55 ,
I can't understand how the variable start
, in method mergeSort
, is changing if don´t have something like
start = start+1
The same goes for variable end
.