public static void main(String[] args) {
int[] arr = {1, 3, 4, 5, 6, 12, 123, 1, 2};
int[] arr2 = {1, 3, 4, 5, 6, 12, 123, 1, 2};
int count = process(arr,0,arr.length-1);
int count2 = process2(arr2);
System.out.println(count2 +"aaaa"+ count);
}
private static int process2(int[] arr) {
int ans = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
ans++;
}
}
}
return ans;
}
private static int process(int[] arr, int l, int r) {
if (l==r) {
return 0;
}
int mid = l + ((r-l)>>1);
return process(arr,l,mid) + process( arr, mid+1,r)+marge(arr,l,mid,r);
}
private static int marge(int[] arr, int l, int mid, int r) {
int[] help = new int[r-l+1];
int i = help.length-1;
int p1 = mid;
int p2 = r;
int count =0;
while (p1>=l && p2>mid){
count+=arr[p1]>arr[p2]?(p2-mid):0;
help[i--] = arr[p1]<=arr[p2]?arr[p2--]:arr[p1--];
}
while (p1>=l){
help[i--] =arr[p1--] ;
}
while ( p2>mid){
help[i--] =arr[p2--] ;
}
for (int j = 0; j < help.length; j++) {
arr[j+l] = help[j];
}
return count;
}
求数组中有多少个逆序对
最新推荐文章于 2024-07-22 14:15:06 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)