mergeSort归并排序,如果不需要排序次数,直接输出数组就可以
import java.util.*;
public class Main{
static int N = 100010;
static int[] f = new int[N];
public static void main(String[] args) throws Exception{
Scanner in = new Scanner(System.in);
int n= in.nextInt();
for(int i=0;i<n;i++){
f[i] = in.nextInt();
}
System.out.println(mergeSort(f, 0 , n - 1));
}
public static long mergeSort(int[] nums ,int l,int r){
long res=0;
if(l>=r) return 0;
int mid=l+r>>1;
res += mergeSort(nums,l,mid)+mergeSort(nums,mid+1,r);
int i=l,j=mid+1,k=0; // k为临时数组下标 i从左边开始 j从右边
int[] temp =new int[r-l+1];
while(i<=mid && j<=r){
if(nums[i]<=nums[j]){
temp[k++] = nums[i++];
}else{
temp[k++] = nums[j++];
res+=mid-i+1;
}
}
while(i<=mid){
temp[k++]=nums[i++];
}
while(j<=r){
temp[k++]=nums[j++];
}
for(i=l,j=0;i<=r;j++,i++){
nums[i]=temp[j];
}
return res;
}
}