package 排序算法;
public class MergerSort {
public static void main(String[] args) {
int[] arr= {3,2,5,6};
System.out.println(mergerSort(arr));
System.out.println();
}
public static int mergerSort(int[] arr) {
if(arr==null||arr.length<2) {
return 0;
}
int res=mergerProcess(arr, 0, arr.length-1);
return res;
}
public static int mergerProcess(int[] arr, int L, int R) {
if(L==R) {
return 0;
}
int mid=(L+R)/2;
return mergerProcess(arr, L, mid)+
mergerProcess(arr, mid+1, R)+
merger(arr, L, mid, R);
}
public static int merger(int[] arr, int l, int mid, int r) {
int i=0;
int p1=l;
int p2=mid+1;
int[] help = new int[r-l+1];
int res=0;
while(p1<=mid && p2<=r) {
res+=arr[p1]<arr[p2]?arr[p1]*(r-p2+1):0;
help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++];
}
while(p1<=mid) {
help[i++]=arr[p1++];
}
while(p2<=r) {
help[i++]=arr[p2++];
}
for(int k=0;k<help.length;k++) {
arr[l+k]=help[k];
}
return res;
}
}
2019-05-23归并排
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 今天是什么日子 起床:6点。 孩子上学,我都把常规闹铃定到5点。只是做了一夜的梦,中途还醒来。 睡前喝了两杯山楂酒...