package sort;
public class MergeSort {
public static void main(String[] args) {
int[] arr=new int[] {34,23,45,-56,76,8,4,34,0};
System.out.println("before sorting");
for(int a:arr) {
System.out.printf("%d\t",a);
}
mergeSort(arr,0,arr.length-1);
System.out.println("\nafter sorting");
for(int a:arr) {
System.out.printf("%d\t",a);
}
}
public static void mergeSort(int[] arr,int left,int right) {
if(left<right) {
int mid=(left+right)/2;
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,left,mid,right);
}
}
public static void merge(int[] arr,int left,int mid,int right) {
int i,j,p;
int left_length=mid-left+1;
int right_length=right-mid;
int[] left_arr=new int[left_length];
int[] right_arr=new int[right_length];
for(i=0,p=left;i<left_length;i++,p++) {
left_arr[i]=arr[p];
}
for(i=0,p=mid+1;i<right_length;i++,p++) {
right_arr[i]=arr[p];
}
for(i=0,j=0,p=left;i<left_length&&j<right_length;p++) {
if(left_arr[i]>right_arr[j]) {
arr[p]=right_arr[j++];
}else {
arr[p]=left_arr[i++];
}
}
if(i<left_length) {
for(;i<left_length;i++,p++) {
arr[p]=left_arr[i];
}
}
if(j<right_length) {
for(;j<right_length;j++,p++) {
arr[p]=right_arr[j];
}
}
}
}