代码演示:
package swordfingeroffer
;
public class InterviewQuestion51 {
int count
= 0;
public int inversePairs(int[] array
) {
if (null
!= array
) {
mergeSortUpDown(array
, 0, array
.length
- 1);
}
return count
;
}
private void mergeSortUpDown(int[] a
, int start
, int end
) {
if (start
>= end
) {
return;
}
int mid
= (start
+ end
) / 2;
mergeSortUpDown(a
, start
, mid
);
mergeSortUpDown(a
, mid
+ 1, end
);
merge(a
, start
, mid
, end
);
}
private void merge(int[] a
, int start
, int mid
, int end
) {
int[] tmp
= new int[end
- start
+ 1];
int i
= start
;
int j
= mid
+ 1;
int k
= 0;
while (i
<= mid
&& j
<= end
) {
if (a
[i
] < a
[j
]) {
tmp
[k
++] = a
[i
++];
} else {
tmp
[k
++] = a
[j
++];
count
+= mid
- i
+ 1;
}
}
while (i
<= mid
) {
tmp
[k
++] = a
[i
++];
}
while (j
<= end
) {
tmp
[k
++] = a
[j
++];
}
for (int index
= 0; index
< tmp
.length
; index
++) {
a
[start
+ k
] = tmp
[k
];
}
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-59359.html