Merge Sort in java

public class MergeSort {

public static void main(String[] args) {
int[] arr = {3,2,4,6,7,8,92,4,68,97,23,7,90,54,89,47,83,42,2,75,0,0,1,0};
System.out.println(Arrays.toString(arr));
mergeSort(arr , 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}

private static void mergeSort(int[] arr, int init, int last) {
//if(init < last) { //both are the way
if(init == last ) return;
           else {
int mid = (init + last) /2;
mergeSort(arr, init, mid);
mergeSort(arr, mid+1, last);
merge(arr, init, mid, last);
//System.out.println(Arrays.toString(mergeSort(arr , 0, arr.length-1)));
}
}

private static void merge(int[] arr, int init, int mid, int last) {
int n1 = mid - init +1;
int n2 = last - mid ;

int [] arr1 = new int[n1];
int [] arr2 = new int[n2];

for(int i = 0; i<n1; i++) {
arr1[i] = arr[init + i];
}
for(int j = 0; j<n2; j++) {
arr2[j] = arr[mid + 1 + j];
}
//System.out.println(" arr1 "+Arrays.toString(arr1));
//System.out.println(" arr2 "+Arrays.toString(arr2));

int i = 0,j = 0, k = init;
while(i < n1 && j< n2 ) {
if(arr1[i] <= arr2[j]) {
arr[k] = arr1[i];
i++;
}else {
arr[k] = arr2[j];
j++;
}
k++;
}
while(i < n1) {
arr[k] = arr1[i];
i++;
k++;
}
while(j < n2) {
arr[k] = arr2[j];
j++;
k++;
}
}
}

Post a Comment

Previous Post Next Post