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;
}
}
该博客详细介绍了归并排序(mergeSort)的Java实现,通过递归将数组拆分并重新组合来达到排序的目的。主要内容包括归并排序的基本思想、代码实现以及其在大数据排序中的应用。在代码中,博主展示了如何计算交换次数,并提供了完整的main方法用于测试排序过程。
798

被折叠的 条评论
为什么被折叠?



