class Main {
private static int count = 0;
public static void main(String[] args) {
int[] arr = new int[]{2,4,3,1,5,6};
mergeSort(arr,0,arr.length);
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
System.out.println(count);
}
public static boolean mergeSort(int[] arr,int arrStart,int arrEnd)
{
int len = arrEnd - arrStart;
if (len < 0)
return false;
if (len == 1 || len == 0)
return true;
int mid = ((arrEnd - arrStart) >> 1) + arrStart;
mergeSort(arr,arrStart,mid);
mergeSort(arr,mid,arrEnd);
return merge(arr,arrStart,mid,arrEnd);
}
public static boolean merge(int[] arr,int arrStart,int mid,int arrEnd)
{
int[] tempArr = new int[arrEnd - arrStart];
int index = 0;
int i = arrStart;
int j = mid;
while (i < mid && j < arrEnd)
{
if (arr[i] <= arr[j])
tempArr[index++] = arr[i++];
else
{
tempArr[index++] = arr[j++];
count += (mid - i);
}
}
while(i < mid)
tempArr[index++] = arr[i++];
while(j < arrEnd)
tempArr[index++] = arr[j++];
for(int k = arrStart;k < arrEnd;++k)
arr[k] = tempArr[k - arrStart];
tempArr = null;
return true;
}
}