Skip to content

Commit 7e64606

Browse files
Inverse number
1 parent e3fae26 commit 7e64606

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package algorithms.inverse_number;
2+
3+
import java.util.Scanner;
4+
5+
public class Main {
6+
private long inverseNumber;
7+
8+
public Main() {
9+
inverseNumber = 0;
10+
}
11+
12+
private void run() {
13+
Scanner scanner = new Scanner(System.in);
14+
int arraySize = scanner.nextInt();
15+
int[] array = new int[arraySize];
16+
for (int i = 0; i < arraySize; i++) {
17+
array[i] = scanner.nextInt();
18+
}
19+
int[] sortedArray = mergeSort(array, 0, array.length);
20+
System.out.println(inverseNumber);
21+
}
22+
23+
private int[] mergeSort(int[] array, int from, int to) {
24+
if (to - from == 1) {
25+
int[] oneElementArray = new int[1];
26+
oneElementArray[0] = array[from];
27+
return oneElementArray;
28+
}
29+
int midPoint = (from + to) / 2;
30+
return merge(
31+
mergeSort(array, from, midPoint),
32+
mergeSort(array, midPoint, to)
33+
);
34+
}
35+
36+
private int[] merge(int[] leftArray, int[] rightArray) {
37+
int leftIndex = 0, rightIndex = 0;
38+
int[] merged = new int[leftArray.length + rightArray.length];
39+
for (int i = 0; i < leftArray.length + rightArray.length; i++) {
40+
if (leftIndex < leftArray.length && rightIndex < rightArray.length) {
41+
if (leftArray[leftIndex] > rightArray[rightIndex]) {
42+
merged[i] = rightArray[rightIndex++];
43+
inverseNumber += leftArray.length - leftIndex;
44+
}
45+
else {
46+
merged[i] = leftArray[leftIndex++];
47+
}
48+
}
49+
else {
50+
if (rightIndex < rightArray.length) {
51+
merged[i] = rightArray[rightIndex++];
52+
}
53+
else {
54+
merged[i] = leftArray[leftIndex++];
55+
}
56+
}
57+
}
58+
return merged;
59+
}
60+
61+
public static void main(String[] args) {
62+
new Main().run();
63+
}
64+
}

0 commit comments

Comments
 (0)